Erster Commit des bestehenden monolithischen WinForms-Copytraders, inklusive der Alt-Backups (*.bak), damit diese dauerhaft in der Historie rekonstruierbar bleiben. Threema-Lib unter libs/ wurde vendored (nested .git entfernt). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
106 lines
3.0 KiB
C#
106 lines
3.0 KiB
C#
// 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<CtfDomain>
|
|
{
|
|
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);
|