// File: hash_test.csx #r "nuget: Nethereum.Signer, 4.22.0" #r "nuget: Nethereum.ABI, 4.22.0" #r "nuget: Nethereum.Hex, 4.22.0" using System; using System.Numerics; using Nethereum.Signer.EIP712; using Nethereum.Signer; using Nethereum.ABI.FunctionEncoding.Attributes; [Struct("EIP712Domain")] public class CtfDomain { [Parameter("string", "name", 1)] public string Name { get; set; } [Parameter("string", "version", 2)] public string Version { get; set; } [Parameter("uint256", "chainId", 3)] public ulong ChainId { get; set; } [Parameter("address", "verifyingContract", 4)] public string VerifyingContract { get; set; } } [Struct("Order")] public class CtfOrder { [Parameter("uint256", "salt", 1)] public BigInteger Salt { get; set; } [Parameter("address", "maker", 2)] public string Maker { get; set; } [Parameter("address", "signer", 3)] public string Signer { get; set; } [Parameter("address", "taker", 4)] public string Taker { get; set; } [Parameter("uint256", "tokenId", 5)] public BigInteger TokenId { get; set; } [Parameter("uint256", "makerAmount", 6)] public BigInteger MakerAmount { get; set; } [Parameter("uint256", "takerAmount", 7)] public BigInteger TakerAmount { get; set; } [Parameter("uint256", "expiration", 8)] public BigInteger Expiration { get; set; } [Parameter("uint256", "nonce", 9)] public BigInteger Nonce { get; set; } [Parameter("uint256", "feeRateBps", 10)] public BigInteger FeeRateBps { get; set; } [Parameter("uint8", "side", 11)] public byte Side { get; set; } [Parameter("uint8", "signatureType", 12)] public byte SignatureType { get; set; } } var typedData = new TypedData { Domain = new CtfDomain { Name = "Polymarket CTF Exchange", Version = "1", ChainId = 137, VerifyingContract = "0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E" }, Types = Nethereum.ABI.EIP712.MemberDescriptionFactory.GetTypesMemberDescription(typeof(CtfDomain), typeof(CtfOrder)), PrimaryType = "Order" }; var ctfOrder = new CtfOrder { Salt = 17747015785747, Maker = "0x628914cf1e96a9d1ab8f0489a9f64be5633bac41", Signer = "0x883fe952a23bb68aab8832343d4bedde759b40ea", Taker = "0x0000000000000000000000000000000000000000", TokenId = BigInteger.Parse("54119275359569982132308633107899675342776540894581625713762792947175003762644"), MakerAmount = 999180, TakerAmount = 3660000, Expiration = 0, Nonce = 0, FeeRateBps = 0, Side = 0, SignatureType = 0 }; string privKey = new string('1', 64); var eip712TypedDataSigner = new Eip712TypedDataSigner(); var key = new EthECKey(privKey); var hash = eip712TypedDataSigner.HashTypedDataV4(ctfOrder, typedData); var sig = eip712TypedDataSigner.SignTypedDataV4(ctfOrder, typedData, key); Console.WriteLine("CS_STRUCT_HASH|" + Nethereum.Hex.HexConvertors.Extensions.HexByteConvertorExtensions.ToHex(hash, true)); Console.WriteLine("CS_SIG|" + sig);