/// <summary>
        /// Create a new MuxedAccountMed25519 from an account id in the format "M...".
        /// </summary>
        /// <param name="muxedAccountId"></param>
        /// <returns></returns>
        public static MuxedAccountMed25519 FromMuxedAccountId(string muxedAccountId)
        {
            var(id, data) = StrKey.DecodeStellarMuxedAccount(muxedAccountId);
            var key = KeyPair.FromPublicKey(data);

            return(new MuxedAccountMed25519(key, id));
        }
        /// <summary>
        /// Create a new MuxedAccountMed25519 from the xdr object.
        /// </summary>
        /// <param name="muxed"></param>
        /// <returns></returns>
        public static MuxedAccountMed25519 FromMuxedAccountXdr(xdr.MuxedAccount.MuxedAccountMed25519 muxed)
        {
            var innerKey = KeyPair.FromPublicKey(muxed.Ed25519.InnerValue);
            var id       = muxed.Id.InnerValue;

            return(new MuxedAccountMed25519(innerKey, id));
        }
        public static IAccountId FromXdrMuxedAccount(xdr.MuxedAccount muxedAccount)
        {
            switch (muxedAccount.Discriminant.InnerValue)
            {
            case CryptoKeyType.CryptoKeyTypeEnum.KEY_TYPE_ED25519:
                return(KeyPair.FromPublicKey(muxedAccount.Ed25519.InnerValue));

            case CryptoKeyType.CryptoKeyTypeEnum.KEY_TYPE_MUXED_ED25519:
                return(MuxedAccountMed25519.FromMuxedAccountXdr(muxedAccount.Med25519));

            default:
                throw new InvalidOperationException("Invalid MuxedAccount type");
            }
        }
Esempio n. 4
0
        public static Transaction FromEnvelopeXdrV0(TransactionV0Envelope envelope)
        {
            var        transactionXdr = envelope.Tx;
            var        fee            = transactionXdr.Fee.InnerValue;
            KeyPair    sourceAccount  = KeyPair.FromPublicKey(transactionXdr.SourceAccountEd25519.InnerValue);
            long       sequenceNumber = transactionXdr.SeqNum.InnerValue.InnerValue;
            Memo       memo           = Memo.FromXdr(transactionXdr.Memo);
            TimeBounds timeBounds     = TimeBounds.FromXdr(transactionXdr.TimeBounds);

            Operation[] operations = new Operation[transactionXdr.Operations.Length];
            for (int i = 0; i < transactionXdr.Operations.Length; i++)
            {
                operations[i] = Operation.FromXdr(transactionXdr.Operations[i]);
            }

            Transaction transaction = new Transaction(sourceAccount, fee, sequenceNumber, operations, memo, timeBounds);

            foreach (var signature in envelope.Signatures)
            {
                transaction.Signatures.Add(signature);
            }

            return(transaction);
        }