aboutsummaryrefslogtreecommitdiff
path: root/examples/mctx_gen
diff options
context:
space:
mode:
Diffstat (limited to 'examples/mctx_gen')
-rw-r--r--examples/mctx_gen/main.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/examples/mctx_gen/main.go b/examples/mctx_gen/main.go
new file mode 100644
index 0000000..7e0f715
--- /dev/null
+++ b/examples/mctx_gen/main.go
@@ -0,0 +1,71 @@
+package main
+
+import (
+ "bytes"
+ "flag"
+ "fmt"
+ "math/big"
+ "strings"
+
+ "github.com/ava-labs/avalanchego/ids"
+ "github.com/ava-labs/coreth"
+ "github.com/ava-labs/coreth/core/types"
+ "github.com/ava-labs/coreth/core/vm"
+ "github.com/ethereum/go-ethereum/accounts/abi"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/common/hexutil"
+ "github.com/ethereum/go-ethereum/crypto"
+)
+
+func checkError(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
+
+var mcAbiJSON = `[{"inputs":[],"name":"enableMultiCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coinid","type":"uint256"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"coinid","type":"uint256"},{"internalType":"uint256","name":"amount2","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"}]`
+
+func main() {
+ var fChainID int64
+ var fKey string
+ var fNonce uint64
+ var fGasPrice int64
+ var fGasLimit uint64
+ var fTo string
+ var fAmount int64
+ var fAssetID string
+ flag.Int64Var(&fChainID, "chainid", 43112, "tx.chainId")
+ flag.Uint64Var(&fNonce, "nonce", 0, "tx.nonce")
+ flag.Int64Var(&fChainID, "gasprice", 1000000000, "tx.gasPrice")
+ flag.Uint64Var(&fNonce, "gaslimit", 10000000, "tx.gasLimit")
+ flag.Int64Var(&fAmount, "amount", 100, "tx.amount")
+ flag.StringVar(&fKey, "key", "0x56289e99c94b6912bfc12adc093c9b51124f0dc54ac7a766b2bc5ccf558d8027", "private key (hex with \"0x\")")
+ flag.StringVar(&fTo, "to", "0x1f0e5C64AFdf53175f78846f7125776E76FA8F34", "tx.to (hex with \"0x\")")
+ flag.StringVar(&fAssetID, "assetid", "va6gCYWu3boo3NKQgzdwfzB73dmTYKZn2EZ7nz5pbDBXAsaj4", "assetID")
+
+ _pkey, err := crypto.HexToECDSA(fKey[2:])
+ checkError(err)
+ pkey := coreth.NewKeyFromECDSA(_pkey)
+
+ // info required to generate a transaction
+ chainID := big.NewInt(fChainID)
+ nonce := fNonce
+ gasPrice := big.NewInt(fGasPrice)
+ gasLimit := fGasLimit
+ to := common.HexToAddress(fTo)
+ assetID, err := ids.FromString(fAssetID)
+ checkError(err)
+ mcAbi, err := abi.JSON(strings.NewReader(mcAbiJSON))
+ data, err := mcAbi.Pack("transfer", to, big.NewInt(0), common.Hash(assetID.Key()).Big(), big.NewInt(fAmount))
+ checkError(err)
+ tx := types.NewTransaction(nonce, vm.BuiltinAddr, big.NewInt(0), uint64(gasLimit), gasPrice, data)
+ signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainID), pkey.PrivateKey)
+ checkError(err)
+ txJSON, err := signedTx.MarshalJSON()
+ checkError(err)
+ fmt.Printf("json: %s\n", string(txJSON))
+ buff := new(bytes.Buffer)
+ err = signedTx.EncodeRLP(buff)
+ checkError(err)
+ fmt.Printf("hex: %s\n", hexutil.Encode(buff.Bytes()))
+}