Exemplo n.º 1
0
        public static CitaTransaction NewTransaction(string nonce, string to, ulong quota,
                                                     uint version, ulong blockLimit, byte[] data, string chainId)
        {
            var transaction = new CitaTransaction()
            {
                Nonce           = nonce,
                Quota           = quota,
                Version         = version,
                Value           = Util.ConvertToByteString(value),
                Data            = Util.ConvertToByteString(data),
                ValidUntilBlock = blockLimit
            };

            if (version == 0)
            {
                transaction.To      = to;
                transaction.ChainId = uint.Parse(chainId);
            }
            else
            {
                transaction.ToV1 = Util.ConvertToByteString(hexStringToBytes(to));

                transaction.ChainIdV1 = Util.ConvertToByteString(ToBytes32(hexStringToBytes(chainId)));
            }
            return(transaction);
        }
Exemplo n.º 2
0
        private static byte[] SignData(CitaTransaction trans, bool sm, ECKeyPair key)
        {
            var tx = Util.MarshalByte(trans);

            if (sm)
            {
                var publicKeyStr = fillStr64(formatHexString(Hex.ToHexString(key.pubk.Q.XCoord.ToBigInteger().ToByteArray())))
                                   + fillStr64(formatHexString(Hex.ToHexString(key.pubk.Q.YCoord.ToBigInteger().ToByteArray())));
                Console.WriteLine(string.Format("publicKeyStr:{0}", publicKeyStr));
                BigInteger r, s;
                SM2Utils.Sign(SM2Utils.SM3Hash(tx), key.prik, out r, out s);
                var signStr        = fillStr64(formatHexString(Hex.ToHexString(r.ToByteArray()))) + fillStr64(formatHexString(Hex.ToHexString(s.ToByteArray())));
                var publicKeyBytes = Hex.Decode(publicKeyStr);
                var signBytes      = Hex.Decode(signStr);
                var byteSource     = new byte[signBytes.Length + publicKeyBytes.Length];
                signBytes.CopyTo(byteSource, 0);
                publicKeyBytes.CopyTo(byteSource, signBytes.Length);
                return(byteSource);
            }
            return(null);
        }