Skip to content

Commit 458a19b

Browse files
committed
Payload mint timestamps + generate with pk webgl
1 parent 162f874 commit 458a19b

File tree

3 files changed

+285
-108
lines changed

3 files changed

+285
-108
lines changed

Assets/Thirdweb/Core/Scripts/ERC1155.cs

Lines changed: 157 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -540,10 +540,8 @@ public class ERC1155MintPayload
540540
public int quantity;
541541
public NFTMetadata metadata;
542542
public string uid;
543-
544-
// TODO implement these, needs JS bridging support
545-
// public long mintStartTime;
546-
// public long mintEndTime;
543+
public long mintStartTime;
544+
public long mintEndTime;
547545

548546
public ERC1155MintPayload(string receiverAddress, NFTMetadata metadata, int quantity = 1)
549547
{
@@ -556,9 +554,8 @@ public ERC1155MintPayload(string receiverAddress, NFTMetadata metadata, int quan
556554
this.royaltyBps = 0;
557555
this.quantity = quantity;
558556
this.uid = Utils.ToBytes32HexString(Guid.NewGuid().ToByteArray());
559-
// TODO temporary solution
560-
// this.mintStartTime = Utils.UnixTimeNowMs() * 1000L;
561-
// this.mintEndTime = this.mintStartTime + 1000L * 60L * 60L * 24L * 365L;
557+
this.mintStartTime = Utils.GetUnixTimeStampNow() - 60;
558+
this.mintEndTime = Utils.GetUnixTimeStampIn10Years();
562559
}
563560
}
564561

@@ -574,10 +571,8 @@ public class ERC1155MintAdditionalPayload
574571
public int royaltyBps;
575572
public int quantity;
576573
public string uid;
577-
578-
// TODO implement these, needs JS bridging support
579-
// public long mintStartTime;
580-
// public long mintEndTime;
574+
public long mintStartTime;
575+
public long mintEndTime;
581576

582577
public ERC1155MintAdditionalPayload(string receiverAddress, string tokenId, int quantity = 1)
583578
{
@@ -590,9 +585,8 @@ public ERC1155MintAdditionalPayload(string receiverAddress, string tokenId, int
590585
this.royaltyBps = 0;
591586
this.quantity = quantity;
592587
this.uid = Utils.ToBytes32HexString(Guid.NewGuid().ToByteArray());
593-
// TODO temporary solution
594-
// this.mintStartTime = Utils.UnixTimeNowMs() * 1000L;
595-
// this.mintEndTime = this.mintStartTime + 1000L * 60L * 60L * 24L * 365L;
588+
this.mintStartTime = Utils.GetUnixTimeStampNow() - 60;
589+
this.mintEndTime = Utils.GetUnixTimeStampIn10Years();
596590
}
597591
}
598592

@@ -643,13 +637,61 @@ public async Task<ERC1155SignedPayload> Generate(ERC1155MintPayload payloadToSig
643637
{
644638
if (Utils.IsWebGLBuild())
645639
{
646-
return await Bridge.InvokeRoute<ERC1155SignedPayload>(getRoute("generate"), Utils.ToJsonStringArray(payloadToSign));
640+
var signedPayload = await Bridge.InvokeRoute<ERC1155SignedPayload>(getRoute("generate"), Utils.ToJsonStringArray(payloadToSign));
641+
642+
if (privateKeyOverride == "")
643+
return signedPayload;
644+
645+
var req = new TokenERC1155Contract.MintRequest()
646+
{
647+
To = payloadToSign.to,
648+
RoyaltyRecipient = signedPayload.payload.royaltyRecipient,
649+
RoyaltyBps = signedPayload.payload.royaltyBps,
650+
PrimarySaleRecipient = signedPayload.payload.primarySaleRecipient,
651+
TokenId = Utils.GetMaxUint256(),
652+
Uri = signedPayload.payload.uri,
653+
Quantity = payloadToSign.quantity,
654+
PricePerToken = BigInteger.Parse(payloadToSign.price.ToWei()),
655+
Currency = payloadToSign.currencyAddress,
656+
ValidityStartTimestamp = payloadToSign.mintStartTime,
657+
ValidityEndTimestamp = payloadToSign.mintEndTime,
658+
Uid = payloadToSign.uid.HexStringToByteArray()
659+
};
660+
661+
string signature = await Thirdweb.EIP712.GenerateSignature_TokenERC1155(
662+
"TokenERC1155",
663+
"1",
664+
await ThirdwebManager.Instance.SDK.wallet.GetChainId(),
665+
contractAddress,
666+
req,
667+
string.IsNullOrEmpty(privateKeyOverride) ? null : privateKeyOverride
668+
);
669+
670+
signedPayload = new ERC1155SignedPayload()
671+
{
672+
signature = signature,
673+
payload = new ERC1155SignedPayloadOutput()
674+
{
675+
to = req.To,
676+
tokenId = req.TokenId.ToString(),
677+
price = req.PricePerToken.ToString(),
678+
currencyAddress = req.Currency,
679+
primarySaleRecipient = req.PrimarySaleRecipient,
680+
royaltyRecipient = req.RoyaltyRecipient,
681+
royaltyBps = (int)req.RoyaltyBps,
682+
quantity = (int)req.Quantity,
683+
uri = req.Uri,
684+
uid = req.Uid.ByteArrayToHexString(),
685+
mintStartTime = (long)req.ValidityStartTimestamp,
686+
mintEndTime = (long)req.ValidityEndTimestamp
687+
}
688+
};
689+
690+
return signedPayload;
647691
}
648692
else
649693
{
650694
var uri = await ThirdwebManager.Instance.SDK.storage.UploadText(JsonConvert.SerializeObject(payloadToSign.metadata));
651-
var startTime = await Utils.GetCurrentBlockTimeStamp();
652-
var endTime = Utils.GetUnixTimeStampIn10Years();
653695
var royalty = await TransactionManager.ThirdwebRead<TokenERC1155Contract.GetDefaultRoyaltyInfoFunction, TokenERC1155Contract.GetDefaultRoyaltyInfoOutputDTO>(
654696
contractAddress,
655697
new TokenERC1155Contract.GetDefaultRoyaltyInfoFunction() { }
@@ -659,7 +701,7 @@ public async Task<ERC1155SignedPayload> Generate(ERC1155MintPayload payloadToSig
659701
new TokenERC1155Contract.PrimarySaleRecipientFunction() { }
660702
);
661703

662-
TokenERC1155Contract.MintRequest req = new TokenERC1155Contract.MintRequest()
704+
var req = new TokenERC1155Contract.MintRequest()
663705
{
664706
To = payloadToSign.to,
665707
RoyaltyRecipient = royalty.ReturnValue1,
@@ -670,8 +712,8 @@ public async Task<ERC1155SignedPayload> Generate(ERC1155MintPayload payloadToSig
670712
Quantity = payloadToSign.quantity,
671713
PricePerToken = BigInteger.Parse(payloadToSign.price.ToWei()),
672714
Currency = payloadToSign.currencyAddress,
673-
ValidityStartTimestamp = startTime,
674-
ValidityEndTimestamp = endTime,
715+
ValidityStartTimestamp = payloadToSign.mintStartTime,
716+
ValidityEndTimestamp = payloadToSign.mintEndTime,
675717
Uid = payloadToSign.uid.HexStringToByteArray()
676718
};
677719

@@ -684,33 +726,83 @@ await ThirdwebManager.Instance.SDK.wallet.GetChainId(),
684726
string.IsNullOrEmpty(privateKeyOverride) ? null : privateKeyOverride
685727
);
686728

687-
ERC1155SignedPayload signedPayload = new ERC1155SignedPayload();
688-
signedPayload.signature = signature;
689-
signedPayload.payload = new ERC1155SignedPayloadOutput()
729+
var signedPayload = new ERC1155SignedPayload()
690730
{
691-
to = req.To,
692-
tokenId = req.TokenId.ToString(),
693-
price = req.PricePerToken.ToString(),
694-
currencyAddress = req.Currency,
695-
primarySaleRecipient = req.PrimarySaleRecipient,
696-
royaltyRecipient = req.RoyaltyRecipient,
697-
royaltyBps = (int)req.RoyaltyBps,
698-
quantity = (int)req.Quantity,
699-
uri = req.Uri,
700-
uid = req.Uid.ByteArrayToHexString(),
701-
mintStartTime = (long)req.ValidityStartTimestamp,
702-
mintEndTime = (long)req.ValidityEndTimestamp
731+
signature = signature,
732+
payload = new ERC1155SignedPayloadOutput()
733+
{
734+
to = req.To,
735+
tokenId = req.TokenId.ToString(),
736+
price = req.PricePerToken.ToString(),
737+
currencyAddress = req.Currency,
738+
primarySaleRecipient = req.PrimarySaleRecipient,
739+
royaltyRecipient = req.RoyaltyRecipient,
740+
royaltyBps = (int)req.RoyaltyBps,
741+
quantity = (int)req.Quantity,
742+
uri = req.Uri,
743+
uid = req.Uid.ByteArrayToHexString(),
744+
mintStartTime = (long)req.ValidityStartTimestamp,
745+
mintEndTime = (long)req.ValidityEndTimestamp
746+
}
703747
};
704748

705749
return signedPayload;
706750
}
707751
}
708752

709-
public async Task<ERC1155SignedPayload> GenerateFromTokenId(ERC1155MintAdditionalPayload payloadToSign)
753+
public async Task<ERC1155SignedPayload> GenerateFromTokenId(ERC1155MintAdditionalPayload payloadToSign, string privateKeyOverride = "")
710754
{
711755
if (Utils.IsWebGLBuild())
712756
{
713-
return await Bridge.InvokeRoute<ERC1155SignedPayload>(getRoute("generateFromTokenId"), Utils.ToJsonStringArray(payloadToSign));
757+
var signedPayload = await Bridge.InvokeRoute<ERC1155SignedPayload>(getRoute("generateFromTokenId"), Utils.ToJsonStringArray(payloadToSign));
758+
759+
if (privateKeyOverride == "")
760+
return signedPayload;
761+
762+
var req = new TokenERC1155Contract.MintRequest()
763+
{
764+
To = payloadToSign.to,
765+
RoyaltyRecipient = signedPayload.payload.royaltyRecipient,
766+
RoyaltyBps = (BigInteger)signedPayload.payload.royaltyBps,
767+
PrimarySaleRecipient = signedPayload.payload.primarySaleRecipient,
768+
TokenId = BigInteger.Parse(payloadToSign.tokenId),
769+
Uri = signedPayload.payload.uri,
770+
Quantity = payloadToSign.quantity,
771+
PricePerToken = BigInteger.Parse(payloadToSign.price),
772+
Currency = payloadToSign.currencyAddress,
773+
ValidityStartTimestamp = payloadToSign.mintStartTime,
774+
ValidityEndTimestamp = payloadToSign.mintEndTime,
775+
Uid = payloadToSign.uid.HexStringToByteArray()
776+
};
777+
string signature = await Thirdweb.EIP712.GenerateSignature_TokenERC1155(
778+
"TokenERC1155",
779+
"1",
780+
await ThirdwebManager.Instance.SDK.wallet.GetChainId(),
781+
contractAddress,
782+
req,
783+
string.IsNullOrEmpty(privateKeyOverride) ? null : privateKeyOverride
784+
);
785+
786+
signedPayload = new ERC1155SignedPayload()
787+
{
788+
signature = signature,
789+
payload = new ERC1155SignedPayloadOutput()
790+
{
791+
to = req.To,
792+
tokenId = req.TokenId.ToString(),
793+
price = req.PricePerToken.ToString(),
794+
currencyAddress = req.Currency,
795+
primarySaleRecipient = req.PrimarySaleRecipient,
796+
royaltyRecipient = req.RoyaltyRecipient,
797+
royaltyBps = (int)req.RoyaltyBps,
798+
quantity = (int)req.Quantity,
799+
uri = req.Uri,
800+
uid = req.Uid.ByteArrayToHexString(),
801+
mintStartTime = (long)req.ValidityStartTimestamp,
802+
mintEndTime = (long)req.ValidityEndTimestamp
803+
}
804+
};
805+
return signedPayload;
714806
}
715807
else
716808
{
@@ -719,8 +811,6 @@ public async Task<ERC1155SignedPayload> GenerateFromTokenId(ERC1155MintAdditiona
719811
contractAddress,
720812
new TokenERC1155Contract.UriFunction() { TokenId = BigInteger.Parse(payloadToSign.tokenId) }
721813
);
722-
var startTime = await Utils.GetCurrentBlockTimeStamp();
723-
var endTime = Utils.GetUnixTimeStampIn10Years();
724814
var royalty = await TransactionManager.ThirdwebRead<TokenERC1155Contract.GetDefaultRoyaltyInfoFunction, TokenERC1155Contract.GetDefaultRoyaltyInfoOutputDTO>(
725815
contractAddress,
726816
new TokenERC1155Contract.GetDefaultRoyaltyInfoFunction() { }
@@ -730,7 +820,7 @@ public async Task<ERC1155SignedPayload> GenerateFromTokenId(ERC1155MintAdditiona
730820
new TokenERC1155Contract.PrimarySaleRecipientFunction() { }
731821
);
732822

733-
TokenERC1155Contract.MintRequest req = new TokenERC1155Contract.MintRequest()
823+
var req = new TokenERC1155Contract.MintRequest()
734824
{
735825
To = payloadToSign.to,
736826
RoyaltyRecipient = royalty.ReturnValue1,
@@ -741,29 +831,38 @@ public async Task<ERC1155SignedPayload> GenerateFromTokenId(ERC1155MintAdditiona
741831
Quantity = payloadToSign.quantity,
742832
PricePerToken = BigInteger.Parse(payloadToSign.price),
743833
Currency = payloadToSign.currencyAddress,
744-
ValidityStartTimestamp = startTime,
745-
ValidityEndTimestamp = endTime,
834+
ValidityStartTimestamp = payloadToSign.mintStartTime,
835+
ValidityEndTimestamp = payloadToSign.mintEndTime,
746836
Uid = payloadToSign.uid.HexStringToByteArray()
747837
};
748838

749-
string signature = await Thirdweb.EIP712.GenerateSignature_TokenERC1155("TokenERC1155", "1", await ThirdwebManager.Instance.SDK.wallet.GetChainId(), contractAddress, req);
839+
string signature = await Thirdweb.EIP712.GenerateSignature_TokenERC1155(
840+
"TokenERC1155",
841+
"1",
842+
await ThirdwebManager.Instance.SDK.wallet.GetChainId(),
843+
contractAddress,
844+
req,
845+
string.IsNullOrEmpty(privateKeyOverride) ? null : privateKeyOverride
846+
);
750847

751-
ERC1155SignedPayload signedPayload = new ERC1155SignedPayload();
752-
signedPayload.signature = signature;
753-
signedPayload.payload = new ERC1155SignedPayloadOutput()
848+
var signedPayload = new ERC1155SignedPayload()
754849
{
755-
to = req.To,
756-
tokenId = req.TokenId.ToString(),
757-
price = req.PricePerToken.ToString(),
758-
currencyAddress = req.Currency,
759-
primarySaleRecipient = req.PrimarySaleRecipient,
760-
royaltyRecipient = req.RoyaltyRecipient,
761-
royaltyBps = (int)req.RoyaltyBps,
762-
quantity = (int)req.Quantity,
763-
uri = req.Uri,
764-
uid = req.Uid.ByteArrayToHexString(),
765-
mintStartTime = (long)req.ValidityStartTimestamp,
766-
mintEndTime = (long)req.ValidityEndTimestamp
850+
signature = signature,
851+
payload = new ERC1155SignedPayloadOutput()
852+
{
853+
to = req.To,
854+
tokenId = req.TokenId.ToString(),
855+
price = req.PricePerToken.ToString(),
856+
currencyAddress = req.Currency,
857+
primarySaleRecipient = req.PrimarySaleRecipient,
858+
royaltyRecipient = req.RoyaltyRecipient,
859+
royaltyBps = (int)req.RoyaltyBps,
860+
quantity = (int)req.Quantity,
861+
uri = req.Uri,
862+
uid = req.Uid.ByteArrayToHexString(),
863+
mintStartTime = (long)req.ValidityStartTimestamp,
864+
mintEndTime = (long)req.ValidityEndTimestamp
865+
}
767866
};
768867
return signedPayload;
769868
}

0 commit comments

Comments
 (0)