From 93a7f324c06321023e2702f7989fdfad32573793 Mon Sep 17 00:00:00 2001 From: Determinant Date: Sat, 19 Sep 2020 22:27:11 -0400 Subject: apply mulit-coin universally --- examples/mctx_gen/main.go | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 examples/mctx_gen/main.go (limited to 'examples/mctx_gen') 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())) +} -- cgit v1.2.3