Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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));
        }
Пример #4
0
        /// <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));
        }
Пример #5
0
        /// <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));
        }