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()); }
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()); }