Skip to content

Commit b44b007

Browse files
erc20
1 parent dd15656 commit b44b007

File tree

6 files changed

+240
-9
lines changed

6 files changed

+240
-9
lines changed

Assets/SDKTest.cs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,18 @@ public async void GetERC1155()
4949
count++;
5050
resultText.text = "Fetching Token: " + count;
5151
NFT result = await contract.ERC1155.Get(count.ToString());
52-
Debug.Log("name: " + result.metadata.name);
53-
Debug.Log("owner: " + result.owner);
5452
resultText.text = result.metadata.name + " (x" + result.quantityOwned + ")";
55-
// int supply = await contract.ERC721.TotalClaimedSupply();
56-
// fetchButton.text = supply.ToString();
57-
// string uri = await contract.Read<string>("tokenURI", count);
58-
// fetchButton.text = uri;
53+
}
54+
55+
public async void GetERC20()
56+
{
57+
var contract = sdk.GetContract("0xB4870B21f80223696b68798a755478C86ce349bE"); // Token
58+
Debug.Log("Button clicked");
59+
resultText.text = "Fetching Token info";
60+
Currency result = await contract.ERC20.Get();
61+
CurrencyValue currencyValue = await contract.ERC20.TotalSupply();
62+
Debug.Log("name: " + result.name);
63+
resultText.text = result.name + " (" + currencyValue.displayValue + ")";
5964
}
6065

6166
public async void MintERC721()
@@ -111,4 +116,24 @@ public async void MintERC1155()
111116
var result = await contract.ERC1155.signature.Mint(p);
112117
resultText.text = "sigminted tokenId: " + result.id;
113118
}
119+
120+
public async void MintERC20()
121+
{
122+
Debug.Log("Claim button clicked");
123+
resultText.text = "claiming...";
124+
125+
// claim
126+
// var contract = sdk.GetContract("0x86B7df0dc0A790789D8fDE4C604EF8187FF8AD2A"); // Edition Drop
127+
// var result = await contract.ERC1155.Claim("0", 1);
128+
// Debug.Log("result receipt: " + result[0].receipt.transactionHash);
129+
// resultText.text = "claim successful";
130+
131+
132+
// sig mint
133+
var contract = sdk.GetContract("0xB4870B21f80223696b68798a755478C86ce349bE"); // Token
134+
var payload = new ERC20MintPayload("0xE79ee09bD47F4F5381dbbACaCff2040f2FbC5803", "3.2");
135+
var p = await contract.ERC20.signature.Generate(payload);
136+
await contract.ERC20.signature.Mint(p);
137+
resultText.text = "sigminted currency successfully";
138+
}
114139
}

Assets/Scenes/SampleScene.unity

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,7 +1226,7 @@ MonoBehaviour:
12261226
m_Calls:
12271227
- m_Target: {fileID: 354401067}
12281228
m_TargetAssemblyTypeName: SDKTest, Assembly-CSharp
1229-
m_MethodName:
1229+
m_MethodName: MintERC20
12301230
m_Mode: 1
12311231
m_Arguments:
12321232
m_ObjectArgument: {fileID: 0}
@@ -1768,7 +1768,7 @@ MonoBehaviour:
17681768
m_Calls:
17691769
- m_Target: {fileID: 354401067}
17701770
m_TargetAssemblyTypeName: SDKTest, Assembly-CSharp
1771-
m_MethodName:
1771+
m_MethodName: GetERC20
17721772
m_Mode: 1
17731773
m_Arguments:
17741774
m_ObjectArgument: {fileID: 0}

Assets/Thirdweb/Scripts/Contract.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ public class Contract
99
{
1010
public string chain;
1111
public string address;
12+
public ERC20 ERC20;
1213
public ERC721 ERC721;
1314
public ERC1155 ERC1155;
1415

1516
public Contract(string chain, string address) {
1617
this.chain = chain;
1718
this.address = address;
19+
this.ERC20 = new ERC20(chain, address);
1820
this.ERC721 = new ERC721(chain, address);
1921
this.ERC1155 = new ERC1155(chain, address);
2022
}

Assets/Thirdweb/Scripts/ERC20.cs

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
4+
namespace Thirdweb
5+
{
6+
/// <summary>
7+
/// Interact with any <c>ERC20</c> compatible contract.
8+
/// </summary>
9+
public class ERC20
10+
{
11+
public string chain;
12+
public string address;
13+
public ERC20Signature signature;
14+
15+
public ERC20(string chain, string address)
16+
{
17+
this.chain = chain;
18+
this.address = address;
19+
this.signature = new ERC20Signature(chain, address);
20+
}
21+
22+
/// READ FUNCTIONS
23+
24+
public async Task<Currency> Get()
25+
{
26+
return await Bridge.InvokeRoute<Currency>(getRoute("get"), new string[] { });
27+
}
28+
29+
public async Task<CurrencyValue> Balance()
30+
{
31+
return await Bridge.InvokeRoute<CurrencyValue>(getRoute("balance"), new string[] { });
32+
}
33+
34+
public async Task<CurrencyValue> BalanceOf(string address)
35+
{
36+
return await Bridge.InvokeRoute<CurrencyValue>(getRoute("balanceOf"), Utils.ToJsonStringArray(address));
37+
}
38+
39+
public async Task<string> Allowance(string spender)
40+
{
41+
return await Bridge.InvokeRoute<string>(getRoute("allowance"), Utils.ToJsonStringArray(spender));
42+
}
43+
44+
public async Task<string> AllowanceOf(string owner, string spender)
45+
{
46+
return await Bridge.InvokeRoute<string>(getRoute("allowanceOf"), Utils.ToJsonStringArray(owner, spender));
47+
}
48+
49+
public async Task<CurrencyValue> TotalSupply()
50+
{
51+
return await Bridge.InvokeRoute<CurrencyValue>(getRoute("totalSupply"), new string[] { });
52+
}
53+
54+
/// WRITE FUNCTIONS
55+
56+
public async Task<TransactionResult> SetAllowance(string spender, bool amount)
57+
{
58+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("setAllowance"), Utils.ToJsonStringArray(spender, amount));
59+
}
60+
61+
public async Task<TransactionResult> Transfer(string to, string amount)
62+
{
63+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("transfer"), Utils.ToJsonStringArray(to, amount));
64+
}
65+
66+
public async Task<TransactionResult> Burn(string amount)
67+
{
68+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("burn"), Utils.ToJsonStringArray(amount));
69+
}
70+
71+
public async Task<TransactionResult[]> Claim(string amount)
72+
{
73+
return await Bridge.InvokeRoute<TransactionResult[]>(getRoute("claim"), Utils.ToJsonStringArray(amount));
74+
}
75+
76+
public async Task<TransactionResult[]> ClaimTo(string address, int amount)
77+
{
78+
return await Bridge.InvokeRoute<TransactionResult[]>(getRoute("claimTo"), Utils.ToJsonStringArray(address, amount));
79+
}
80+
81+
public async Task<TransactionResult> Mint(string amount)
82+
{
83+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("mint"), Utils.ToJsonStringArray(amount));
84+
}
85+
86+
public async Task<TransactionResult> MintTo(string address, string amount)
87+
{
88+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("mintTo"), Utils.ToJsonStringArray(address, amount));
89+
}
90+
91+
/// PRIVATE
92+
93+
private string getRoute(string functionPath) {
94+
return this.address + ".erc20." + functionPath;
95+
}
96+
}
97+
98+
[System.Serializable]
99+
#nullable enable
100+
public class ERC20MintPayload
101+
{
102+
public string to;
103+
public string price;
104+
public string currencyAddress;
105+
public string primarySaleRecipient;
106+
public string quantity;
107+
public string uid;
108+
// TODO implement these, needs JS bridging support
109+
// public long mintStartTime;
110+
// public long mintEndTime;
111+
112+
public ERC20MintPayload(string receiverAddress, string quantity) {
113+
this.to = receiverAddress;
114+
this.quantity = quantity;
115+
this.price = "0";
116+
this.currencyAddress = Utils.AddressZero;
117+
this.primarySaleRecipient = Utils.AddressZero;
118+
this.uid = Utils.ToBytes32HexString(Guid.NewGuid().ToByteArray());
119+
// TODO temporary solution
120+
// this.mintStartTime = Utils.UnixTimeNowMs() * 1000L;
121+
// this.mintEndTime = this.mintStartTime + 1000L * 60L * 60L * 24L * 365L;
122+
}
123+
}
124+
125+
[System.Serializable]
126+
public struct ERC20SignedPayloadOutput
127+
{
128+
public string to;
129+
public string price;
130+
public string currencyAddress;
131+
public string primarySaleRecipient;
132+
public string quantity;
133+
public string uid;
134+
public long mintStartTime;
135+
public long mintEndTime;
136+
}
137+
138+
[System.Serializable]
139+
public struct ERC20SignedPayload
140+
{
141+
public string signature;
142+
public ERC20SignedPayloadOutput payload;
143+
}
144+
145+
public class ERC20Signature
146+
{
147+
public string chain;
148+
public string address;
149+
150+
public ERC20Signature(string chain, string address)
151+
{
152+
this.chain = chain;
153+
this.address = address;
154+
}
155+
156+
public async Task<ERC20SignedPayload> Generate(ERC20MintPayload payloadToSign)
157+
{
158+
return await Bridge.InvokeRoute<ERC20SignedPayload>(getRoute("generate"), Utils.ToJsonStringArray(payloadToSign));
159+
}
160+
161+
public async Task<bool> Verify(ERC20SignedPayload signedPayload)
162+
{
163+
return await Bridge.InvokeRoute<bool>(getRoute("verify"), Utils.ToJsonStringArray(signedPayload));
164+
}
165+
166+
public async Task<TransactionResult> Mint(ERC20SignedPayload signedPayload)
167+
{
168+
return await Bridge.InvokeRoute<TransactionResult>(getRoute("mint"), Utils.ToJsonStringArray(signedPayload));
169+
}
170+
171+
private string getRoute(string functionPath) {
172+
return this.address + ".erc20.signature." + functionPath;
173+
}
174+
}
175+
}

Assets/Thirdweb/Scripts/ERC20.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Thirdweb/Scripts/Types.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,25 @@ public struct NFT
2727
public string owner;
2828
public string type;
2929
public int supply;
30-
public int? quantityOwned;
30+
public int quantityOwned; // only for ERC1155.GetOwned()
31+
}
32+
33+
[System.Serializable]
34+
public struct Currency
35+
{
36+
public string name;
37+
public string symbol;
38+
public string decimals;
39+
}
40+
41+
[System.Serializable]
42+
public struct CurrencyValue
43+
{
44+
public string name;
45+
public string symbol;
46+
public string decimals;
47+
public string value;
48+
public string displayValue;
3149
}
3250

3351
[System.Serializable]

0 commit comments

Comments
 (0)