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