/// <summary> /// Create NEP17 token transfer transaction /// </summary> /// <param name="scriptHash">contract script hash</param> /// <param name="fromKey">from KeyPair</param> /// <param name="to">to account script hash</param> /// <param name="amount">transfer amount</param> /// <param name="data">onPayment data</param> /// <returns></returns> public async Task <Transaction> CreateTransferTxAsync(UInt160 scriptHash, KeyPair fromKey, UInt160 to, BigInteger amount, object data = null) { var sender = Contract.CreateSignatureRedeemScript(fromKey.PublicKey).ToScriptHash(); Signer[] signers = new[] { new Signer { Scopes = WitnessScope.CalledByEntry, Account = sender } }; byte[] script = scriptHash.MakeScript("transfer", true, sender, to, amount, data); TransactionManagerFactory factory = new TransactionManagerFactory(rpcClient, magic); TransactionManager manager = await factory.MakeTransactionAsync(script, signers).ConfigureAwait(false); return(await manager .AddSignature(fromKey) .SignAsync().ConfigureAwait(false)); }
/// <summary> /// Create NEP17 token transfer transaction from multi-sig account /// </summary> /// <param name="scriptHash">contract script hash</param> /// <param name="m">multi-sig min signature count</param> /// <param name="pubKeys">multi-sig pubKeys</param> /// <param name="fromKeys">sign keys</param> /// <param name="to">to account</param> /// <param name="amount">transfer amount</param> /// <param name="data">onPayment data</param> /// <returns></returns> public async Task <Transaction> CreateTransferTxAsync(UInt160 scriptHash, int m, ECPoint[] pubKeys, KeyPair[] fromKeys, UInt160 to, BigInteger amount, object data = null) { if (m > fromKeys.Length) { throw new ArgumentException($"Need at least {m} KeyPairs for signing!"); } var sender = Contract.CreateMultiSigContract(m, pubKeys).ScriptHash; Signer[] signers = new[] { new Signer { Scopes = WitnessScope.CalledByEntry, Account = sender } }; byte[] script = scriptHash.MakeScript("transfer", true, sender, to, amount, data); TransactionManagerFactory factory = new TransactionManagerFactory(rpcClient, magic); TransactionManager manager = await factory.MakeTransactionAsync(script, signers).ConfigureAwait(false); return(await manager .AddMultiSig(fromKeys, m, pubKeys) .SignAsync().ConfigureAwait(false)); }
/// <summary> /// Deploy Contract, return signed transaction /// </summary> /// <param name="contractScript">contract script</param> /// <param name="manifest">contract manifest</param> /// <param name="key">sender KeyPair</param> /// <returns></returns> public async Task <Transaction> CreateDeployContractTxAsync(byte[] nefFile, ContractManifest manifest, KeyPair key) { byte[] script; using (ScriptBuilder sb = new ScriptBuilder()) { sb.EmitDynamicCall(NativeContract.ContractManagement.Hash, "deploy", true, nefFile, manifest.ToString()); script = sb.ToArray(); } UInt160 sender = Contract.CreateSignatureRedeemScript(key.PublicKey).ToScriptHash(); Signer[] signers = new[] { new Signer { Scopes = WitnessScope.CalledByEntry, Account = sender } }; TransactionManagerFactory factory = new TransactionManagerFactory(rpcClient, magic); TransactionManager manager = await factory.MakeTransactionAsync(script, signers).ConfigureAwait(false); return(await manager .AddSignature(key) .SignAsync().ConfigureAwait(false)); }
/// <summary> /// Helper function for one-off TransactionManager creation /// </summary> public static Task <TransactionManager> MakeTransactionAsync(RpcClient rpcClient, ReadOnlyMemory <byte> script, long systemFee, Signer[] signers = null, TransactionAttribute[] attributes = null) { var factory = new TransactionManagerFactory(rpcClient); return(factory.MakeTransactionAsync(script, systemFee, signers, attributes)); }
/// <summary> /// Helper function for one-off TransactionManager creation /// </summary> public static Task <TransactionManager> MakeTransactionAsync(RpcClient rpcClient, byte[] script, Signer[] signers = null, TransactionAttribute[] attributes = null) { var factory = new TransactionManagerFactory(rpcClient); return(factory.MakeTransactionAsync(script, signers, attributes)); }