static async Task PerformContractTransactions(LocalTestNet localTestNet, EntryPointContract entryContract, SolcBytecodeInfo contractBytecode, Abi entryFunction) { // Perform the contract deployment transaction var deployParams = new TransactionParams { From = localTestNet.Accounts[0], Gas = ArbitraryDefaults.DEFAULT_GAS_LIMIT, GasPrice = ArbitraryDefaults.DEFAULT_GAS_PRICE }; var contractAddress = await ContractFactory.Deploy(localTestNet.RpcClient, HexUtil.HexToBytes(contractBytecode.Bytecode), deployParams); var contractInstance = new ContractInstance( entryContract.ContractPath, entryContract.ContractName, localTestNet.RpcClient, contractAddress, localTestNet.Accounts[0]); // If entry function is specified then send transasction to it. if (entryFunction != null) { var callData = EncoderUtil.GetFunctionCallBytes($"{entryFunction.Name}()"); var ethFunc = EthFunc.Create(contractInstance, callData); var funcTxParams = new TransactionParams { From = localTestNet.Accounts[0], Gas = ArbitraryDefaults.DEFAULT_GAS_LIMIT, GasPrice = ArbitraryDefaults.DEFAULT_GAS_PRICE }; await ethFunc.SendTransaction(funcTxParams); } }
/// <summary> /// Deploys the contract. <para/> /// </summary> /// <param name = "rpcClient">The RPC client to be used for this contract instance.</param> /// <param name = "defaultFromAccount">If null then the first account returned by eth_accounts will be used.</param> /// <returns>An contract instance pointed at the deployed contract address.</returns> public static async Task <aclContract> Deploy(Meadow.JsonRpc.Client.IJsonRpcClient rpcClient, Meadow.JsonRpc.Types.TransactionParams transactionParams = null, Meadow.Core.EthTypes.Address?defaultFromAccount = null) { transactionParams = transactionParams ?? new Meadow.JsonRpc.Types.TransactionParams(); defaultFromAccount = defaultFromAccount ?? transactionParams.From ?? (await rpcClient.Accounts())[0]; transactionParams.From = transactionParams.From ?? defaultFromAccount; var encodedParams = Array.Empty <byte>(); var contractAddr = await ContractFactory.Deploy(rpcClient, BYTECODE_BYTES.Value, transactionParams, encodedParams); return(new aclContract(rpcClient, contractAddr, defaultFromAccount.Value)); }
/// <summary> /// Deploys the contract. <para/> /// </summary> /// <param name = "total"><c>uint256</c></param> /// <param name = "rpcClient">The RPC client to be used for this contract instance.</param> /// <param name = "defaultFromAccount">If null then the first account returned by eth_accounts will be used.</param> /// <returns>An contract instance pointed at the deployed contract address.</returns> public static async Task <ERC20Basic> Deploy(Meadow.Core.EthTypes.UInt256 total, Meadow.JsonRpc.Client.IJsonRpcClient rpcClient, Meadow.JsonRpc.Types.TransactionParams transactionParams = null, Meadow.Core.EthTypes.Address?defaultFromAccount = null) { transactionParams = transactionParams ?? new Meadow.JsonRpc.Types.TransactionParams(); defaultFromAccount = defaultFromAccount ?? transactionParams.From ?? (await rpcClient.Accounts())[0]; transactionParams.From = transactionParams.From ?? defaultFromAccount; var encodedParams = Meadow.Core.AbiEncoding.EncoderUtil.Encode(EncoderFactory.LoadEncoder("uint256", total)); var contractAddr = await ContractFactory.Deploy(rpcClient, BYTECODE_BYTES.Value, transactionParams, encodedParams); return(new ERC20Basic(rpcClient, contractAddr, defaultFromAccount.Value)); }