Esempio n. 1
0
        public override Empty CrossChainCreateToken(CrossChainCreateTokenInput input)
        {
            var parentChainId        = GetValidCrossChainContractReferenceState().GetParentChainId.Call(new Empty()).Value;
            var tokenContractAddress = State.CrossChainTransferWhiteList[parentChainId];

            Assert(tokenContractAddress != null, "Token contract address of parent chain not found.");

            var originalTransaction = Transaction.Parser.ParseFrom(input.TransactionBytes);

            AssertCrossChainTransaction(originalTransaction, tokenContractAddress, nameof(Create));

            var originalTransactionId = originalTransaction.GetHash();

            CrossChainVerify(originalTransactionId, input.ParentChainHeight, input.FromChainId, input.MerklePath);

            CreateInput creationInput = CreateInput.Parser.ParseFrom(originalTransaction.Params);

            RegisterTokenInfo(new TokenInfo
            {
                Symbol       = creationInput.Symbol,
                TokenName    = creationInput.TokenName,
                TotalSupply  = creationInput.TotalSupply,
                Decimals     = creationInput.Decimals,
                Issuer       = creationInput.Issuer,
                IsBurnable   = creationInput.IsBurnable,
                IssueChainId = parentChainId
            });
            return(new Empty());
        }
Esempio n. 2
0
        public override Empty CrossChainCreateToken(CrossChainCreateTokenInput input)
        {
            var tokenContractAddress = State.CrossChainTransferWhiteList[input.FromChainId];

            Assert(tokenContractAddress != null,
                   $"Token contract address of chain {ChainHelper.ConvertChainIdToBase58(input.FromChainId)} not registered.");

            var originalTransaction = Transaction.Parser.ParseFrom(input.TransactionBytes);

            AssertCrossChainTransaction(originalTransaction, tokenContractAddress, nameof(ValidateTokenInfoExists));
            var originalTransactionId = originalTransaction.GetHash();

            CrossChainVerify(originalTransactionId, input.ParentChainHeight, input.FromChainId, input.MerklePath);
            ValidateTokenInfoExistsInput validateTokenInfoExistsInput =
                ValidateTokenInfoExistsInput.Parser.ParseFrom(originalTransaction.Params);

            RegisterTokenInfo(new TokenInfo
            {
                Symbol       = validateTokenInfoExistsInput.Symbol,
                TokenName    = validateTokenInfoExistsInput.TokenName,
                TotalSupply  = validateTokenInfoExistsInput.TotalSupply,
                Decimals     = validateTokenInfoExistsInput.Decimals,
                Issuer       = validateTokenInfoExistsInput.Issuer,
                IsBurnable   = validateTokenInfoExistsInput.IsBurnable,
                IsProfitable = validateTokenInfoExistsInput.IsProfitable,
                IssueChainId = validateTokenInfoExistsInput.IssueChainId
            });
            return(new Empty());
        }