Beispiel #1
0
        public virtual void ShouldPackFixedArrayUint8()
        {
            var list         = new List <int>(new int[] { 1, 2 });
            var soliditySha3 = new ABIEncode();

            Assert.Equal("00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002", soliditySha3.GetABIEncodedPacked(new ABIValue("uint8[2]", list)).ToHex());
        }
Beispiel #2
0
        public virtual void ShouldPackFixedArrayBytes16()
        {
            var list         = new List <byte[]>(new byte[][] { Encoding.UTF8.GetBytes("Hello, world!"), Encoding.UTF8.GetBytes("Hello, world!") });
            var soliditySha3 = new ABIEncode();

            Assert.Equal("48656c6c6f2c20776f726c64210000000000000000000000000000000000000048656c6c6f2c20776f726c642100000000000000000000000000000000000000", soliditySha3.GetABIEncodedPacked(new ABIValue("bytes13[2]", list)).ToHex());
        }
        public static string EncodeSetup(string[] owners, BigInteger threshold, string to = "0x0000000000000000000000000000000000000000", byte[] data = null, string fallbackHandler = "0x0000000000000000000000000000000000000000", string paymentToken = "0x0000000000000000000000000000000000000000", BigInteger payment = new BigInteger(), string paymentReceiver = "0x0000000000000000000000000000000000000000")
        {
            if (data == null)
            {
                data = new byte[] { }
            }
            ;

            var abiEncode = new ABIEncode();

            // @dev Setup function sets initial storage of contract.
            // @param _owners List of Safe owners.
            // @param _threshold Number of required confirmations for a Safe transaction.
            // @param to Contract address for optional delegate call.
            // @param data Data payload for optional delegate call.
            // @param fallbackHandler Handler for fallback calls to this contract
            // @param paymentToken Token that should be used for the payment (0 is ETH)
            // @param payment Value that should be paid
            // @param paymentReceiver Address that should receive the payment (or 0 if tx.origin)
            return(abiEncode.GetABIEncoded(
                       new ABIValue("address[]", owners),
                       new ABIValue("uint256", threshold),
                       new ABIValue("address", to),
                       new ABIValue("bytes", data),
                       new ABIValue("address", fallbackHandler),
                       new ABIValue("address", paymentToken),
                       new ABIValue("uint256", payment),
                       new ABIValue("address", paymentReceiver)
                       ).ToHex());
        }
Beispiel #4
0
        public virtual void ShouldPackStaticArrayAddresses()
        {
            var list         = new List <string>(new string[] { "0x7Dd31bc2ffA37Ab492a8d60F9C7170B78f12E1c5", "0x0Efa8015FCEC7039Feb656a4830Aa6518BF46010" });
            var soliditySha3 = new ABIEncode();

            Assert.Equal("0000000000000000000000007dd31bc2ffa37ab492a8d60f9c7170b78f12e1c50000000000000000000000000efa8015fcec7039feb656a4830aa6518bf46010", soliditySha3.GetABIEncodedPacked(new ABIValue("address[2]", list)).ToHex());
        }
Beispiel #5
0
        /// <summary>
        /// Sign a prroof that a free service provider provided free content to a Witness. Should be signed by wallet owner as Witness
        /// </summary>
        /// <param name="offchainTransaction"></param>
        /// <returns></returns>
        public SignedOffchainFreeServiceTransaction signFreeServiceProviderMbs(SignedOffchainFreeServiceTransaction offchainTransaction)
        {
            var signer  = new MessageSigner();
            var encoder = new ABIEncode();

            ABIValue[] ABIValues = new ABIValue[] {
                new ABIValue("uint", offchainTransaction.epoch),
                new ABIValue("address", offchainTransaction.freeServiceProvider),
                new ABIValue("address", offchainTransaction.validator),
                new ABIValue("uint256", offchainTransaction.freeMb)
            };

            var payloadEncoded = encoder.GetABIEncodedPacked(ABIValues);
            var proof          = Sha3Keccack.Current.CalculateHash(payloadEncoded);

            offchainTransaction.h = proof;

            var signedTx = signer.Sign(offchainTransaction.h, _wallet.PK);


            var signature = MessageSigner.ExtractEcdsaSignature(signedTx);

            offchainTransaction.v = signature.V.FirstOrDefault();
            offchainTransaction.r = signature.R;
            offchainTransaction.s = signature.S;
            if (offchainTransaction.s.Length < 32)
            {
                var tmpS = offchainTransaction.s.ToList();
                tmpS.Insert(0, 0);
                offchainTransaction.s = tmpS.ToArray();
            }

            offchainTransaction.signer = _wallet.address;
            return(offchainTransaction);
        }
Beispiel #6
0
        public virtual void ShouldPackBool()
        {
            var soliditySha3 = new ABIEncode();

            Assert.Equal("01", soliditySha3.GetABIEncodedPacked(true).ToHex());
            Assert.Equal("00", soliditySha3.GetABIEncodedPacked(false).ToHex());
        }
Beispiel #7
0
        /// <summary>
        /// Sign an Offchain payment as a Peer
        /// </summary>
        /// <param name="offchainTransaction">The transaction to be signed</param>
        /// <returns>The Transaction signed by wallet owner as Peer </returns>
        public SignedOffchainTransaction signOffchainPayment(SignedOffchainTransaction offchainTransaction)
        {
            var signer  = new MessageSigner();
            var encoder = new ABIEncode();

            ABIValue[] ABIValues = new ABIValue[] {
                new ABIValue("address", offchainTransaction.beneficiary),
                new ABIValue("bytes32", offchainTransaction.nonce),
                new ABIValue("uint256", offchainTransaction.amount),
                new ABIValue("uint", offchainTransaction.fee)
            };

            var payloadEncoded = encoder.GetABIEncodedPacked(ABIValues);
            var proof          = Sha3Keccack.Current.CalculateHash(payloadEncoded);

            offchainTransaction.h = proof;

            var signedTx = signer.Sign(offchainTransaction.h, _wallet.PK);


            var signature = MessageSigner.ExtractEcdsaSignature(signedTx);

            offchainTransaction.v = signature.V.FirstOrDefault();
            offchainTransaction.r = signature.R;
            offchainTransaction.s = signature.S;
            if (offchainTransaction.s.Length < 32)
            {
                var tmpS = offchainTransaction.s.ToList();
                tmpS.Insert(0, 0);
                offchainTransaction.s = tmpS.ToArray();
            }
            offchainTransaction.signer = _wallet.address;
            return(offchainTransaction);
        }
Beispiel #8
0
        public virtual void ShouldEncodeSha3UsingTypes()
        {
            //0x407D73d8a49eeb85D32Cf465507dd71d507100c1
            var abiEncode = new ABIEncode();

            Assert.Equal("4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b",
                         abiEncode.GetSha3ABIEncodedPacked(new ABIValue("address", "0x407D73d8a49eeb85D32Cf465507dd71d507100c1"))
                         .ToHex());

            Assert.Equal("4e8ebbefa452077428f93c9520d3edd60594ff452a29ac7d2ccc11d47f3ab95b",
                         abiEncode.GetSha3ABIEncodedPacked(new ABIValue("bytes",
                                                                        "0x407D73d8a49eeb85D32Cf465507dd71d507100c1".HexToByteArray())).ToHex());

            //bytes32 it is a 32 bytes array so it will be padded with 00 values
            Assert.Equal("3c69a194aaf415ba5d6afca734660d0a3d45acdc05d54cd1ca89a8988e7625b4",
                         abiEncode.GetSha3ABIEncodedPacked(new ABIValue("bytes32",
                                                                        "0x407D73d8a49eeb85D32Cf465507dd71d507100c1".HexToByteArray())).ToHex());

            //web3.utils.soliditySha3({t: 'string', v: 'Hello!%'}, {t: 'int8', v:-23}, {t: 'address', v: '0x85F43D8a49eeB85d32Cf465507DD71d507100C1d'});
            var result =
                abiEncode.GetSha3ABIEncodedPacked(
                    new ABIValue("string", "Hello!%"), new ABIValue("int8", -23),
                    new ABIValue("address", "0x85F43D8a49eeB85d32Cf465507DD71d507100C1d"));

            Assert.Equal("0xa13b31627c1ed7aaded5aecec71baf02fe123797fffd45e662eac8e06fbe4955", result.ToHex(true));
        }
Beispiel #9
0
        public static string GetSignatureHexString(this Buyer.Po po, string privateKeyHex)
        {
            privateKeyHex = privateKeyHex.EnsureHexPrefix();
            var hashEncoded = new ABIEncode().GetSha3ABIEncoded(new ABIValue(new TupleType(), po));
            var signature   = new EthereumMessageSigner().Sign(hashEncoded, privateKeyHex);

            return(signature);
        }
Beispiel #10
0
        public virtual void ShouldPackAddress()
        {
            var soliditySha3 = new ABIEncode();

            Assert.Equal("0x12890D2cce102216644c59daE5baed380d84830c",
                         soliditySha3.GetABIEncodedPacked(new ABIValue("address", "0x12890D2cce102216644c59daE5baed380d84830c"))
                         .ToHex(true).ConvertToEthereumChecksumAddress());
        }
Beispiel #11
0
        public virtual void ShouldEncodeMultipleValuesUsingDefaultConvertors()
        {
            var paramsEncoded =
                "000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013300000000000000000000000000000000000000000000000000000000000000";
            var abiEncode = new ABIEncode();
            var encoded   = abiEncode.GetABIEncoded("1", "2", "3").ToHex();

            Assert.Equal(paramsEncoded, encoded);
        }
Beispiel #12
0
        public virtual void ShouldEncodeMultipleTypesIncludingDynamicString()
        {
            var paramsEncoded =
                "0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000568656c6c6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005776f726c64000000000000000000000000000000000000000000000000000000";
            var abiEncode = new ABIEncode();
            var result    = abiEncode.GetABIEncoded(new ABIValue("string", "hello"), new ABIValue("int", 69),
                                                    new ABIValue("string", "world"));

            Assert.Equal("0x" + paramsEncoded, result.ToHex(true));
        }
Beispiel #13
0
        /// <inheritdoc />
        public string EncodeChangeRequirementParams(BigInteger requirement)
        {
            // TODO: Extract this directly from the ABI
            const string ChangeRequirementMethod = "ba51a6df";

            var    abiEncode = new ABIEncode();
            string result    = ChangeRequirementMethod + abiEncode.GetABIEncoded(new ABIValue("uint256", requirement)).ToHex();

            return(result);
        }
Beispiel #14
0
        /// <inheritdoc />
        public string EncodeRemoveOwnerParams(string existingOwnerAddress)
        {
            // TODO: Extract this directly from the ABI
            const string RemoveOwnerMethod = "173825d9";

            var    abiEncode = new ABIEncode();
            string result    = RemoveOwnerMethod + abiEncode.GetABIEncoded(new ABIValue("address", existingOwnerAddress)).ToHex();

            return(result);
        }
Beispiel #15
0
        public virtual void ShouldEncodeParams()
        {
            var abiEncode = new ABIEncode();
            var result    = abiEncode.GetSha3ABIParamsEncodedPacked(new TestParamsInput
            {
                First = "Hello!%", Second = -23, Third = "0x85F43D8a49eeB85d32Cf465507DD71d507100C1d"
            });

            Assert.Equal("0xa13b31627c1ed7aaded5aecec71baf02fe123797fffd45e662eac8e06fbe4955", result.ToHex(true));
        }
Beispiel #16
0
        /// <inheritdoc />
        public string EncodeAddOwnerParams(string newOwnerAddress)
        {
            // TODO: Extract this directly from the ABI
            const string AddOwnerMethod = "7065cb48";

            var    abiEncode = new ABIEncode();
            string result    = AddOwnerMethod + abiEncode.GetABIEncoded(new ABIValue("address", newOwnerAddress)).ToHex();

            return(result);
        }
        /// <inheritdoc />
        public string EncodeBurnParams(BigInteger amount, string straxAddress)
        {
            // TODO: Extract this directly from the ABI
            const string BurnMethod = "7641e6f3";

            var    abiEncode = new ABIEncode();
            string result    = BurnMethod + abiEncode.GetABIEncoded(new ABIValue("uint256", amount), new ABIValue("string", straxAddress)).ToHex();

            return(result);
        }
        /// <inheritdoc />
        public string EncodeMintParams(string address, BigInteger amount)
        {
            // TODO: Extract this directly from the ABI
            const string MintMethod = "40c10f19";

            var    abiEncode = new ABIEncode();
            string result    = MintMethod + abiEncode.GetABIEncoded(new ABIValue("address", address), new ABIValue("uint256", amount)).ToHex();

            return(result);
        }
        /// <inheritdoc />
        public string EncodeTransferParams(string address, BigInteger amount)
        {
            // TODO: Extract this directly from the ABI
            const string TransferMethod = "a9059cbb";

            var    abiEncode = new ABIEncode();
            string result    = TransferMethod + abiEncode.GetABIEncoded(new ABIValue("address", address), new ABIValue("uint256", amount)).ToHex();

            return(result);
        }
Beispiel #20
0
        public virtual void ShouldEncodeParams()
        {
            var paramsEncoded =
                "0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000568656c6c6f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005776f726c64000000000000000000000000000000000000000000000000000000";
            var abiEncode = new ABIEncode();
            var result    = abiEncode.GetABIParamsEncoded(new TestParamsInput()
            {
                First = "hello", Second = 69, Third = "world"
            });

            Assert.Equal("0x" + paramsEncoded, result.ToHex(true));
        }
Beispiel #21
0
        public static byte[] EncodeMultiSend(IMultiSendInput multiSendInput)
        {
            var callData   = multiSendInput.GetCallData();
            var abiEncoder = new ABIEncode();

            return(abiEncoder.GetABIEncodedPacked(
                       new ABIValue("uint8", (int)ContractOperationType.Call),
                       new ABIValue("address", multiSendInput.Target),
                       new ABIValue("uint256", multiSendInput.Value),
                       new ABIValue("uint256", callData.Length),
                       new ABIValue("bytes", callData)));
        }
Beispiel #22
0
        public virtual void ShouldEncodeSha3UsingDefaultValuesIntAsBigInt()
        {
            var abiEncode = new ABIEncode();
            var result    = abiEncode.GetSha3ABIEncodedPacked(new BigInteger(234564535),
                                                              "0xfff23243".HexToByteArray(), true, new BigInteger(-10));

            Assert.Equal("3e27a893dc40ef8a7f0841d96639de2f58a132be5ae466d40087a2cfa83b7179", result.ToHex());

            var result2 = abiEncode.GetSha3ABIEncodedPacked("Hello!%");

            Assert.Equal("661136a4267dba9ccdf6bfddb7c00e714de936674c4bdb065a531cf1cb15c7fc", result2.ToHex());

            var result3 = abiEncode.GetSha3ABIEncodedPacked(new BigInteger(234));

            Assert.Equal("61c831beab28d67d1bb40b5ae1a11e2757fa842f031a2d0bc94a7867bc5d26c2", result3.ToHex());
        }
Beispiel #23
0
        private string getGluwacoinReserveTxnSignature(
            ECurrency currency,
            string address,
            string amount,
            string fee,
            string target,
            string executor,
            BigInteger nonce,
            BigInteger expiryBlockNumber,
            string privateKey)
        {
            BigInteger convertAmount = BigInteger.Zero;
            BigInteger convertFee    = BigInteger.Zero;

            if (currency.IsGluwacoinSideChainCurrency())
            {
                convertAmount = GluwacoinConverter.ConvertToGluwacoinSideChainBigInteger(amount, currency);
                convertFee    = GluwacoinConverter.ConvertToGluwacoinSideChainBigInteger(fee, currency);
            }
            else
            {
                convertAmount = GluwacoinConverter.ConvertToGluwacoinBigInteger(amount);
                convertFee    = GluwacoinConverter.ConvertToGluwacoinBigInteger(fee);
            }

            ABIEncode abiEncode = new ABIEncode();

            byte[] messageHash = abiEncode.GetSha3ABIEncodedPacked(
                new ABIValue("address", GluwaService.getGluwacoinContractAddress(currency, mEnv)),
                new ABIValue("address", address),
                new ABIValue("address", target),
                new ABIValue("address", executor),
                new ABIValue("uint256", convertAmount),
                new ABIValue("uint256", convertFee),
                new ABIValue("uint256", nonce),
                new ABIValue("uint256", expiryBlockNumber)
                );

            EthereumMessageSigner signer = new EthereumMessageSigner();
            string signature             = signer.Sign(messageHash, privateKey);

            return(signature);
        }
Beispiel #24
0
        /// <summary>
        /// Sign an Offchain Payemnt as Relayer using Wallet private key
        /// </summary>
        /// <param name="offchainTransaction">The already signed by Peer Offchain Payment payload</param>
        /// <returns>The transaction signed by Wallet owner as Relayer</returns>
        public async Task <SignedOffchainTransaction> relayerSignOffchainPayment(SignedOffchainTransaction offchainTransaction)
        {
            //Check that already signed payload is valid
            var validSignature = await checkOffchainSignature(offchainTransaction);

            if (!validSignature)
            {
                throw new Exception("Invalid signature");
            }



            var signer  = new MessageSigner();
            var encoder = new ABIEncode();

            ABIValue[] ABIValues = new ABIValue[] {
                new ABIValue("bytes32", offchainTransaction.h),
                new ABIValue("uint", offchainTransaction.txUntilBlock)
            };

            var payloadEncoded = encoder.GetABIEncodedPacked(ABIValues);
            var proof          = Sha3Keccack.Current.CalculateHash(payloadEncoded);

            offchainTransaction.rh = proof;

            var signedTx = signer.Sign(offchainTransaction.rh, _wallet.PK);


            var signature = MessageSigner.ExtractEcdsaSignature(signedTx);

            offchainTransaction.rv = signature.V.FirstOrDefault();
            offchainTransaction.rr = signature.R;
            offchainTransaction.rs = signature.S;
            if (offchainTransaction.rs.Length < 32)
            {
                var tmpS = offchainTransaction.rs.ToList();
                tmpS.Insert(0, 0);
                offchainTransaction.rs = tmpS.ToArray();
            }

            offchainTransaction.relayerId = _wallet.address;
            return(offchainTransaction);
        }
Beispiel #25
0
        private string getGluwacoinTransactionSignature(ECurrency currency, string amount, string fee, string nonce, string address, string target, string privateKey)
        {
            BigInteger convertAmount = BigInteger.Zero;
            BigInteger convertFee    = BigInteger.Zero;

            if (currency.IsGluwacoinSideChainCurrency())
            {
                if (currency == ECurrency.sNGNG)
                {
                    convertAmount = GluwacoinConverter.ConvertToGluwacoinSideChainBigInteger(amount, currency);
                    convertFee    = GluwacoinConverter.ConvertToGluwacoinSideChainBigInteger(fee.ToString(), currency);
                }
                else if (currency == ECurrency.sUSDCG)
                {
                    convertAmount = GluwacoinConverter.ConvertToGluwacoinSideChainBigInteger(amount, currency);
                    convertFee    = GluwacoinConverter.ConvertToGluwacoinSideChainBigInteger(fee.ToString(), currency);
                }
            }
            else
            {
                convertAmount = GluwacoinConverter.ConvertToGluwacoinBigInteger(amount);
                convertFee    = GluwacoinConverter.ConvertToGluwacoinBigInteger(fee.ToString());
            }

            ABIEncode abiEncode = new ABIEncode();

            byte[] messageHash = abiEncode.GetSha3ABIEncodedPacked(
                new ABIValue("address", GluwaService.getGluwacoinContractAddress(currency, mEnv)),
                new ABIValue("address", address),
                new ABIValue("address", target),
                new ABIValue("uint256", convertAmount),
                new ABIValue("uint256", convertFee),
                new ABIValue("uint256", BigInteger.Parse(nonce))
                );

            EthereumMessageSigner signer = new EthereumMessageSigner();
            string signature             = signer.Sign(messageHash, privateKey);

            return(signature);
        }
        private byte[] GetApprovalData(
            TransactionInput transaction,
            BigInteger txFee,
            BigInteger gasPrice,
            BigInteger gasLimit,
            BigInteger nonce,
            string relayHubAddress,
            string relayAddress)
        {
            var abiEncode = new ABIEncode();

            return(abiEncode.GetSha3ABIEncodedPacked(
                       new ABIValue("address", relayAddress),
                       new ABIValue("address", transaction.From),
                       new ABIValue("bytes", transaction.Data.HexToByteArray()),
                       new ABIValue("uint256", txFee),
                       new ABIValue("uint256", gasPrice),
                       new ABIValue("uint256", gasLimit),
                       new ABIValue("uint256", nonce),
                       new ABIValue("address", relayHubAddress),
                       new ABIValue("address", transaction.To)));
        }
Beispiel #27
0
 public PaymentsService(IPaymentTransfersRepository paymentTransfersRepository,
                        ITransactionScopeHandler transactionScopeHandler,
                        IPrivateBlockchainFacadeClient pbfClient,
                        IMAVNPropertyIntegrationClient realEstateIntegrationClient,
                        IEligibilityEngineClient eligibilityEngineClient,
                        ISettingsService settingsService,
                        IWalletManagementClient wmClient,
                        ICustomerProfileClient cpClient,
                        ICampaignClient campaignClient,
                        ILogFactory logFactory)
 {
     _functionCallEncoder         = new FunctionCallEncoder();
     _abiEncode                   = new ABIEncode();
     _paymentTransfersRepository  = paymentTransfersRepository;
     _transactionScopeHandler     = transactionScopeHandler;
     _pbfClient                   = pbfClient;
     _realEstateIntegrationClient = realEstateIntegrationClient;
     _eligibilityEngineClient     = eligibilityEngineClient;
     _settingsService             = settingsService;
     _wmClient       = wmClient;
     _cpClient       = cpClient;
     _campaignClient = campaignClient;
     _log            = logFactory.CreateLog(this);
 }
 public EncoderService()
 {
     _abiEncode           = new ABIEncode();
     _functionCallEncoder = new FunctionCallEncoder();
 }
        public static byte[] GetParamsEncoded <TContractMessage>(this TContractMessage contractMessage) where TContractMessage : ContractMessageBase
        {
            var encoder = new ABIEncode();

            return(encoder.GetABIParamsEncoded(contractMessage));
        }
 public BlockchainEncodingService()
 {
     _functionCallEncoder = new FunctionCallEncoder();
     _abiEncode           = new ABIEncode();
 }