Example #1
0
        /// <summary>
        /// Prepare deposit with given tokens to the child chain
        /// </summary>
        /// <param name="profileFrom">profile of the sender</param>
        /// <param name="currency">transaction currency</param>
        /// <param name="data">data to prepare (amount for ERC20, tokenid for ERC721)</param>
        /// <returns></returns>
        public async Task <BCTransaction> PrepareDeposit(Profile profileFrom, string currency, BigInteger data)
        {
            if (rootChainContract != null)
            {
                Nethereum.Signer.Transaction approveTx = null;

                var currencyType = await GetCurrencyType(currency);

                var tokenHandler = web3.Eth.GetContractHandler(currency);
                if (!IsFungibleCurrency(currencyType))
                {
                    // TODO approve one item (ApproveFunction) or all (SetApprovalForAllFunction)?
                    var approveFunc = tokenHandler.GetFunction <Nethereum.StandardNonFungibleTokenERC721.ContractDefinition.ApproveFunction>();

                    var approveInput = new Nethereum.StandardNonFungibleTokenERC721.ContractDefinition.ApproveFunction();
                    approveInput.To      = rootChainContract.Address;
                    approveInput.TokenId = data;

                    approveTx = await ContractHelper.CreateTransaction(web3, profileFrom.ID, BigInteger.Zero, approveFunc, approveInput);
                }
                else
                {
                    var approveFunc = tokenHandler.GetFunction <Nethereum.StandardTokenEIP20.ContractDefinition.ApproveFunction>();

                    var approveInput = new Nethereum.StandardTokenEIP20.ContractDefinition.ApproveFunction();
                    approveInput.Spender = rootChainContract.Address;
                    approveInput.Value   = data;

                    approveTx = await ContractHelper.CreateTransaction(web3, profileFrom.ID, BigInteger.Zero, approveFunc, approveInput);
                }

                string signedApproveTx = await SignTransaction(profileFrom, approveTx);

                return(await SubmitTransactionOnRootChain(web3, signedApproveTx));
            }
            return(null);
        }