Skip to content

Commit b726757

Browse files
authored
add estimate-fee example (#3)
1 parent 45cab5d commit b726757

File tree

3 files changed

+83
-4
lines changed

3 files changed

+83
-4
lines changed

examples/estimate-fee/main.go

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"log"
6+
"math"
7+
"math/big"
8+
9+
"github.com/availproject/avail-go-sdk/src/config"
10+
"github.com/availproject/avail-go-sdk/src/sdk"
11+
"github.com/availproject/avail-go-sdk/src/sdk/types"
12+
"github.com/vedhavyas/go-subkey"
13+
14+
"fmt"
15+
)
16+
17+
func main() {
18+
config, err := config.LoadConfig()
19+
if err != nil {
20+
fmt.Printf("cannot load config:%v", err)
21+
}
22+
api, err := sdk.NewSDK(config.ApiURL)
23+
if err != nil {
24+
fmt.Printf("cannot create api:%v", err)
25+
}
26+
27+
amount := uint64(math.Pow(10, 18)) * 10 // send amount 10 AVAIL
28+
dest := "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty"
29+
keyringPair, err := sdk.KeyringFromSeed(config.Seed)
30+
if err != nil {
31+
panic(fmt.Sprintf("cannot create KeyPair:%v", err))
32+
}
33+
_, pubkeyBytes, _ := subkey.SS58Decode(dest)
34+
hexString := subkey.EncodeHex(pubkeyBytes)
35+
destAddr, err := sdk.NewMultiAddressFromHexAccountID(hexString)
36+
if err != nil {
37+
log.Fatalf("Failed to create address from given hex: %v", err)
38+
}
39+
bondAmountUCompact := types.NewUCompactFromUInt(amount)
40+
41+
ext, err := sdk.CreateExtrinsic(api, "Balances.transfer_keep_alive", keyringPair, 0, destAddr, bondAmountUCompact)
42+
if err != nil {
43+
log.Fatalf("Failed to create extrinsic: %v", err)
44+
}
45+
46+
encodedExt, err := sdk.EncodeToHex(ext)
47+
if err != nil {
48+
log.Fatalf("Failed to encode extrinsic: %v", err)
49+
}
50+
fmt.Println("Encoded Extrinsic:", encodedExt)
51+
var paymentInfo map[string]interface{}
52+
err = api.Client.Call(&paymentInfo, "payment_queryInfo", encodedExt, nil)
53+
if err != nil {
54+
log.Fatalf("Failed to get payment info: %v", err)
55+
}
56+
57+
// Format the weight
58+
weight := paymentInfo["weight"].(map[string]interface{})
59+
weightJSON, err := json.Marshal(map[string]interface{}{
60+
"refTime": weight["ref_time"],
61+
"proofSize": weight["proof_size"],
62+
})
63+
if err != nil {
64+
log.Fatalf("Failed to marshal weight: %v", err)
65+
}
66+
67+
// Format the partial fee
68+
partialFee, ok := new(big.Int).SetString(paymentInfo["partialFee"].(string), 10)
69+
if !ok {
70+
log.Fatalf("Failed to parse partialFee")
71+
}
72+
mAVAIL := new(big.Float).Quo(new(big.Float).SetInt(partialFee), big.NewFloat(1e15))
73+
fmt.Printf("Transaction Fee for Balance Transfer:\n")
74+
fmt.Printf(" class=%s,\n", paymentInfo["class"])
75+
fmt.Printf(" weight=%s,\n", string(weightJSON))
76+
fmt.Printf(" partialFee=%.4f mAVAIL\n", mAVAIL)
77+
}

examples/go.mod

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ module examples
22

33
go 1.21.0
44

5-
require github.com/availproject/avail-go-sdk v0.1.1
5+
require (
6+
github.com/availproject/avail-go-sdk v0.1.2
7+
github.com/vedhavyas/go-subkey v1.0.4
8+
)
69

710
require (
811
github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect
@@ -23,7 +26,6 @@ require (
2326
github.com/rs/cors v1.8.2 // indirect
2427
github.com/stretchr/objx v0.1.1 // indirect
2528
github.com/stretchr/testify v1.7.2 // indirect
26-
github.com/vedhavyas/go-subkey v1.0.4 // indirect
2729
github.com/vedhavyas/go-subkey/v2 v2.0.0 // indirect
2830
golang.org/x/crypto v0.22.0 // indirect
2931
golang.org/x/sys v0.19.0 // indirect

examples/go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRr
22
github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4=
33
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8=
44
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
5-
github.com/availproject/avail-go-sdk v0.1.1 h1:8mo7H4BYVY4hzafhpXHfUgXTImPXdmQuunZKM3/WgnM=
6-
github.com/availproject/avail-go-sdk v0.1.1/go.mod h1:2LX1D4jRJhLAozmUF8Fzrh8FUA0WhjT1VpUykZsUqDM=
5+
github.com/availproject/avail-go-sdk v0.1.2 h1:DZLuEFmLlMHyqRcAaIkJumiMTMYVBqEWXDemSuCF4Xo=
6+
github.com/availproject/avail-go-sdk v0.1.2/go.mod h1:2LX1D4jRJhLAozmUF8Fzrh8FUA0WhjT1VpUykZsUqDM=
77
github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo=
88
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
99
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=

0 commit comments

Comments
 (0)