Skip to content

Commit

Permalink
Additional 712 utils for SigMint & Forwarder (#23)
Browse files Browse the repository at this point in the history
* Additional 712 utils for SigMint & Forwarder

* Update EIP712.cs
  • Loading branch information
0xFirekeeper authored May 29, 2024
1 parent b9f1792 commit 3cf4d7c
Show file tree
Hide file tree
Showing 3 changed files with 358 additions and 2 deletions.
79 changes: 79 additions & 0 deletions Thirdweb.Tests/Thirdweb.Contracts.Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,85 @@ public async Task WriteTest_PrivateKeyAccount()
}
}

[Fact]
public async Task SignatureMint_Generate()
{
var client = ThirdwebClient.Create(secretKey: _secretKey);
var signer = await PrivateKeyWallet.Create(client, _testPrivateKey);

var randomDomain = "Test";
var randomVersion = "1.0.0";
var randomChainId = 421614;
var randomContractAddress = "0xD04F98C88cE1054c90022EE34d566B9237a1203C";

// GenerateSignature_MinimalForwarder
var forwardRequest = new Contracts.Forwarder.ForwardRequest
{
From = "0x123",
To = "0x456",
Value = BigInteger.Zero,
Gas = BigInteger.Zero,
Nonce = BigInteger.Zero,
Data = "0x"
};
var signature = await EIP712.GenerateSignature_MinimalForwarder(randomDomain, randomVersion, randomChainId, randomContractAddress, forwardRequest, signer);
Assert.NotNull(signature);
Assert.StartsWith("0x", signature);
// GenerateSignature_TokenERC20
var mintRequest20 = new Contracts.TokenERC20.MintRequest
{
To = await signer.GetAddress(),
PrimarySaleRecipient = await signer.GetAddress(),
Quantity = 1,
Price = 0,
Currency = Constants.ADDRESS_ZERO,
ValidityEndTimestamp = 0,
ValidityStartTimestamp = Utils.GetUnixTimeStampIn10Years(),
Uid = new byte[] { 0x01 }
};
var signature20 = await EIP712.GenerateSignature_TokenERC20(randomDomain, randomVersion, randomChainId, randomContractAddress, mintRequest20, signer);
Assert.NotNull(signature20);
Assert.StartsWith("0x", signature20);

// GenerateSignature_TokenERC721
var mintRequest721 = new Contracts.TokenERC721.MintRequest
{
To = await signer.GetAddress(),
RoyaltyRecipient = await signer.GetAddress(),
RoyaltyBps = 0,
PrimarySaleRecipient = await signer.GetAddress(),
Uri = "https://example.com",
Price = 0,
Currency = Constants.ADDRESS_ZERO,
ValidityEndTimestamp = 0,
ValidityStartTimestamp = Utils.GetUnixTimeStampIn10Years(),
Uid = new byte[] { 0x01 }
};
var signature721 = await EIP712.GenerateSignature_TokenERC721(randomDomain, randomVersion, randomChainId, randomContractAddress, mintRequest721, signer);
Assert.NotNull(signature721);
Assert.StartsWith("0x", signature721);

// GenerateSignature_TokenERC1155
var mintRequest1155 = new Contracts.TokenERC1155.MintRequest
{
To = await signer.GetAddress(),
RoyaltyRecipient = await signer.GetAddress(),
RoyaltyBps = 0,
PrimarySaleRecipient = await signer.GetAddress(),
TokenId = 1,
Uri = "https://example.com",
Quantity = 1,
PricePerToken = 0,
Currency = Constants.ADDRESS_ZERO,
ValidityEndTimestamp = 0,
ValidityStartTimestamp = Utils.GetUnixTimeStampIn10Years(),
Uid = new byte[] { 0x01 }
};
var signature1155 = await EIP712.GenerateSignature_TokenERC1155(randomDomain, randomVersion, randomChainId, randomContractAddress, mintRequest1155, signer);
Assert.NotNull(signature1155);
Assert.StartsWith("0x", signature1155);
}

private async Task<SmartWallet> GetAccount()
{
var client = ThirdwebClient.Create(secretKey: _secretKey);
Expand Down
149 changes: 149 additions & 0 deletions Thirdweb/Thirdweb.Contracts/ContractTypes.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
using System.Numerics;
using Nethereum.ABI.FunctionEncoding.Attributes;
using Newtonsoft.Json;

namespace Thirdweb.Contracts.TokenERC20
{
public partial class MintRequest : MintRequestBase { }

public class MintRequestBase
{
[Parameter("address", "to", 1)]
public virtual string To { get; set; }

[Parameter("address", "primarySaleRecipient", 2)]
public virtual string PrimarySaleRecipient { get; set; }

[Parameter("uint256", "quantity", 3)]
public virtual BigInteger Quantity { get; set; }

[Parameter("uint256", "price", 4)]
public virtual BigInteger Price { get; set; }

[Parameter("address", "currency", 5)]
public virtual string Currency { get; set; }

[Parameter("uint128", "validityStartTimestamp", 6)]
public virtual BigInteger ValidityStartTimestamp { get; set; }

[Parameter("uint128", "validityEndTimestamp", 7)]
public virtual BigInteger ValidityEndTimestamp { get; set; }

[Parameter("bytes32", "uid", 8)]
public virtual byte[] Uid { get; set; }
}
}

namespace Thirdweb.Contracts.TokenERC721
{
public partial class MintRequest : MintRequestBase { }

public class MintRequestBase
{
[Parameter("address", "to", 1)]
public virtual string To { get; set; }

[Parameter("address", "royaltyRecipient", 2)]
public virtual string RoyaltyRecipient { get; set; }

[Parameter("uint256", "royaltyBps", 3)]
public virtual BigInteger RoyaltyBps { get; set; }

[Parameter("address", "primarySaleRecipient", 4)]
public virtual string PrimarySaleRecipient { get; set; }

[Parameter("string", "uri", 5)]
public virtual string Uri { get; set; }

[Parameter("uint256", "price", 6)]
public virtual BigInteger Price { get; set; }

[Parameter("address", "currency", 7)]
public virtual string Currency { get; set; }

[Parameter("uint128", "validityStartTimestamp", 8)]
public virtual BigInteger ValidityStartTimestamp { get; set; }

[Parameter("uint128", "validityEndTimestamp", 9)]
public virtual BigInteger ValidityEndTimestamp { get; set; }

[Parameter("bytes32", "uid", 10)]
public virtual byte[] Uid { get; set; }
}
}

namespace Thirdweb.Contracts.TokenERC1155
{
public partial class MintRequest : MintRequestBase { }

public class MintRequestBase
{
[Parameter("address", "to", 1)]
public virtual string To { get; set; }

[Parameter("address", "royaltyRecipient", 2)]
public virtual string RoyaltyRecipient { get; set; }

[Parameter("uint256", "royaltyBps", 3)]
public virtual BigInteger RoyaltyBps { get; set; }

[Parameter("address", "primarySaleRecipient", 4)]
public virtual string PrimarySaleRecipient { get; set; }

[Parameter("uint256", "tokenId", 5)]
public virtual BigInteger TokenId { get; set; }

[Parameter("string", "uri", 6)]
public virtual string Uri { get; set; }

[Parameter("uint256", "quantity", 7)]
public virtual BigInteger Quantity { get; set; }

[Parameter("uint256", "pricePerToken", 8)]
public virtual BigInteger PricePerToken { get; set; }

[Parameter("address", "currency", 9)]
public virtual string Currency { get; set; }

[Parameter("uint128", "validityStartTimestamp", 10)]
public virtual BigInteger ValidityStartTimestamp { get; set; }

[Parameter("uint128", "validityEndTimestamp", 11)]
public virtual BigInteger ValidityEndTimestamp { get; set; }

[Parameter("bytes32", "uid", 12)]
public virtual byte[] Uid { get; set; }
}
}

namespace Thirdweb.Contracts.Forwarder
{
public partial class ForwardRequest : ForwardRequestBase { }

public class ForwardRequestBase
{
[Parameter("address", "from", 1)]
[JsonProperty("from")]
public virtual string From { get; set; }

[Parameter("address", "to", 2)]
[JsonProperty("to")]
public virtual string To { get; set; }

[Parameter("uint256", "value", 3)]
[JsonProperty("value")]
public virtual BigInteger Value { get; set; }

[Parameter("uint256", "gas", 4)]
[JsonProperty("gas")]
public virtual BigInteger Gas { get; set; }

[Parameter("uint256", "nonce", 5)]
[JsonProperty("nonce")]
public virtual BigInteger Nonce { get; set; }

[Parameter("bytes", "data", 6)]
[JsonProperty("data")]
public virtual string Data { get; set; }
}
}
Loading

0 comments on commit 3cf4d7c

Please sign in to comment.