Skip to content

Commit 2a8163e

Browse files
committed
save
1 parent 3d8fdce commit 2a8163e

File tree

12 files changed

+15107
-191
lines changed

12 files changed

+15107
-191
lines changed

Web3/Assets/EasyWeb3/Scenes/demo.unity

Lines changed: 27 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,8 @@ GameObject:
341341
serializedVersion: 6
342342
m_Component:
343343
- component: {fileID: 577329864}
344+
- component: {fileID: 577329865}
345+
- component: {fileID: 577329866}
344346
m_Layer: 0
345347
m_Name: EasyWeb3Tests
346348
m_TagString: Untagged
@@ -361,8 +363,32 @@ Transform:
361363
m_ConstrainProportionsScale: 0
362364
m_Children: []
363365
m_Father: {fileID: 0}
364-
m_RootOrder: 3
366+
m_RootOrder: 2
365367
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
368+
--- !u!114 &577329865
369+
MonoBehaviour:
370+
m_ObjectHideFlags: 0
371+
m_CorrespondingSourceObject: {fileID: 0}
372+
m_PrefabInstance: {fileID: 0}
373+
m_PrefabAsset: {fileID: 0}
374+
m_GameObject: {fileID: 577329863}
375+
m_Enabled: 0
376+
m_EditorHideFlags: 0
377+
m_Script: {fileID: 11500000, guid: 2bc5a1fff7c8c2e439933a0f8d235e1a, type: 3}
378+
m_Name:
379+
m_EditorClassIdentifier:
380+
--- !u!114 &577329866
381+
MonoBehaviour:
382+
m_ObjectHideFlags: 0
383+
m_CorrespondingSourceObject: {fileID: 0}
384+
m_PrefabInstance: {fileID: 0}
385+
m_PrefabAsset: {fileID: 0}
386+
m_GameObject: {fileID: 577329863}
387+
m_Enabled: 1
388+
m_EditorHideFlags: 0
389+
m_Script: {fileID: 11500000, guid: cd6c80e869e30534499b86cbc77a3c7a, type: 3}
390+
m_Name:
391+
m_EditorClassIdentifier:
366392
--- !u!1 &1924797449
367393
GameObject:
368394
m_ObjectHideFlags: 0
@@ -439,47 +465,3 @@ Transform:
439465
m_Father: {fileID: 0}
440466
m_RootOrder: 0
441467
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
442-
--- !u!1 &1929201149
443-
GameObject:
444-
m_ObjectHideFlags: 0
445-
m_CorrespondingSourceObject: {fileID: 0}
446-
m_PrefabInstance: {fileID: 0}
447-
m_PrefabAsset: {fileID: 0}
448-
serializedVersion: 6
449-
m_Component:
450-
- component: {fileID: 1929201151}
451-
- component: {fileID: 1929201150}
452-
m_Layer: 0
453-
m_Name: EasyWeb3
454-
m_TagString: Untagged
455-
m_Icon: {fileID: 0}
456-
m_NavMeshLayer: 0
457-
m_StaticEditorFlags: 0
458-
m_IsActive: 1
459-
--- !u!114 &1929201150
460-
MonoBehaviour:
461-
m_ObjectHideFlags: 0
462-
m_CorrespondingSourceObject: {fileID: 0}
463-
m_PrefabInstance: {fileID: 0}
464-
m_PrefabAsset: {fileID: 0}
465-
m_GameObject: {fileID: 1929201149}
466-
m_Enabled: 1
467-
m_EditorHideFlags: 0
468-
m_Script: {fileID: 11500000, guid: cd6c80e869e30534499b86cbc77a3c7a, type: 3}
469-
m_Name:
470-
m_EditorClassIdentifier:
471-
--- !u!4 &1929201151
472-
Transform:
473-
m_ObjectHideFlags: 0
474-
m_CorrespondingSourceObject: {fileID: 0}
475-
m_PrefabInstance: {fileID: 0}
476-
m_PrefabAsset: {fileID: 0}
477-
m_GameObject: {fileID: 1929201149}
478-
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
479-
m_LocalPosition: {x: 648.696, y: 597.19464, z: -11.17547}
480-
m_LocalScale: {x: 1, y: 1, z: 1}
481-
m_ConstrainProportionsScale: 0
482-
m_Children: []
483-
m_Father: {fileID: 0}
484-
m_RootOrder: 2
485-
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
namespace EasyWeb3 {
22
public class Constants {
33
public static readonly bool debug = true;
4-
public static readonly string NODEDEFAULT_ETH_MAINNET = "http://ec2-44-200-18-204.compute-1.amazonaws.com:8545";
5-
public static readonly string NODEDEFAULT_ETH_ROPSTEN = "http://ec2-44-203-28-1.compute-1.amazonaws.com:8545";
4+
public static readonly string NODEDEFAULT_ETH_MAINNET = "https://mainneteth.runify.org";
5+
public static readonly string NODEDEFAULT_ETH_ROPSTEN = "https://ropsteneth.runify.org";
66
public static readonly string ADDR_UNISWAPV2 = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D";
77
}
88
}

Web3/Assets/EasyWeb3/Scripts/Contracts/ERC20.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
using System;
22
using System.Numerics;
33
using System.Threading.Tasks;
4-
using Nethereum.Web3;
5-
using Nethereum.Hex.HexTypes;
6-
using Nethereum.Hex.HexConvertors.Extensions;
7-
using Nethereum.JsonRpc.Client;
8-
using Nethereum.RPC.Eth.DTOs;
94

105
namespace EasyWeb3 {
116
public class ERC20 : Contract {
12-
private string ERC20ABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]";
137

148
public ERC20(string _contract, ChainId _i) : base(_contract,_i) {}
159
public ERC20(string _contract) : base(_contract,ChainId.ETH_ROPSTEN) {}
Lines changed: 106 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,109 @@
11
using System;
2+
using System.Numerics;
3+
using System.Threading.Tasks;
4+
using System.Collections.Generic;
25

3-
public class ERC721 {
4-
6+
namespace EasyWeb3 {
7+
public class NFT {
8+
public string Url {get; private set;}
9+
public NFT(string _url) {
10+
Url = _url;
11+
}
12+
}
13+
public class ERC721 : Contract {
14+
public ERC721(string _contract, ChainId _i) : base(_contract,_i) {}
15+
public ERC721(string _contract) : base(_contract,ChainId.ETH_ROPSTEN) {}
16+
17+
public async Task<bool> Load() {
18+
await GetTotalSupply(); //
19+
await GetName(); //
20+
await GetSymbol(); //
21+
return true;
22+
}
23+
24+
public async Task<BigInteger> GetTotalSupply() {
25+
var _out = await CallFunction("totalSupply()", new string[]{"uint"});
26+
TotalSupply = (BigInteger)_out[0];
27+
return TotalSupply;
28+
}
29+
30+
public async Task<BigInteger> GetDecimals() {
31+
var _out = await CallFunction("decimals()", new string[]{"uint"});
32+
Decimals = (BigInteger)_out[0];
33+
return Decimals;
34+
}
35+
36+
public async Task<string> GetName() {
37+
var _out = await CallFunction("name()", new string[]{"string"});
38+
Name = (string)_out[0];
39+
return Name;
40+
}
41+
42+
public async Task<string> GetSymbol() {
43+
var _out = await CallFunction("symbol()", new string[]{"string"});
44+
Symbol = (string)_out[0];
45+
return Symbol;
46+
}
47+
48+
/// <summary>
49+
/// Returns a count of NFTs assigned to an address
50+
/// </summary>
51+
public async Task<BigInteger> GetBalanceOf(string _owner) {
52+
var _out = await CallFunction("balanceOf(address)", new string[]{"uint"}, new string[]{_owner});
53+
return (BigInteger)_out[0];
54+
}
55+
56+
public async Task<BigInteger> GetTokenOfOwnerByIndex(string _owner, int _index) {
57+
var _out = await CallFunction("tokenOfOwnerByIndex(address,uint256)", new string[]{"uint"}, new string[]{_owner,_index.ToString()});
58+
return (BigInteger)_out[0];
59+
}
60+
61+
public async Task<string> GetToken(int _tokenId) {
62+
var _out = await CallFunction("tokenURI(uint256)", new string[]{"string"}, new string[]{_tokenId.ToString()});
63+
UnityEngine.Debug.Log(_out.Count);
64+
return (string)_out[0];
65+
}
66+
67+
public async Task<List<NFT>> GetOwnerNFTs(string _owner) {
68+
List<NFT> _nfts = new List<NFT>();
69+
BigInteger _bal = await GetBalanceOf(_owner);
70+
UnityEngine.Debug.Log("Owner Balance: "+_bal);
71+
for (int i = 0; i < _bal; i++) {
72+
BigInteger _token = await GetTokenOfOwnerByIndex(_owner, i);
73+
UnityEngine.Debug.Log("Found token: "+_token);
74+
string _nftStr = await GetToken((int)_token);
75+
UnityEngine.Debug.Log("NFT JSON: "+_nftStr);
76+
_nfts.Add(new NFT(_nftStr));
77+
}
78+
return _nfts;
79+
}
80+
81+
// function tokenByIndex(uint256 _index) external view returns (uint256);
82+
// function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
83+
// function tokenURI(uint256 _tokenId) external view returns (string);
84+
// function ownerOf(uint256 _tokenId) external view returns (address);
85+
// function getApproved(uint256 _tokenId) external view returns (address); (return who can sell this tokenId)
86+
// function isApprovedForAll(address _owner, address _operator) external view returns (bool); (can _operator sell all tokenIds)
87+
88+
/* NFT Metadata
89+
{
90+
"title": "Asset Metadata",
91+
"type": "object",
92+
"properties": {
93+
"name": {
94+
"type": "string",
95+
"description": "Identifies the asset to which this NFT represents"
96+
},
97+
"description": {
98+
"type": "string",
99+
"description": "Describes the asset to which this NFT represents"
100+
},
101+
"image": {
102+
"type": "string",
103+
"description": "A URI pointing to a resource with mime type image/* representing the asset to which this NFT represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive."
104+
}
105+
}
106+
}
107+
*/
108+
}
5109
}

Web3/Assets/EasyWeb3/Scripts/EasyWeb3Tests.cs

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
/*
2+
Tests run against contract: https://ropsten.etherscan.io/address/0x0F6F756e309C451558FCf1F7A66aEf0D553A6e86#code
3+
*/
4+
15
using System.Numerics;
26
using System.Threading.Tasks;
3-
using UnityEngine;
7+
using System.Collections.Generic;
48
using EasyWeb3;
9+
using UnityEngine;
510

611
public class EasyWeb3Tests : MonoBehaviour {
712
private string EasyWeb3UnitTestContract = "0x0F6F756e309C451558FCf1F7A66aEf0D553A6e86";
@@ -11,13 +16,37 @@ private void Start() {
1116
}
1217

1318
private async void Load() {
14-
await TestERC20Calls();
15-
await TestUintCalls();
16-
await TestByteCalls();
17-
await TestArrayCalls();
18-
await TestComplexCalls();
19+
// await TestERC20Calls();
20+
// await TestUintCalls();
21+
// await TestByteCalls();
22+
// await TestArrayCalls();
23+
// await TestComplexCalls();
24+
await TestERC721Calls();
25+
}
26+
27+
// NFTs
28+
private async Task<bool> TestERC721Calls() {
29+
try {
30+
string _nftProject = "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D"; //boredapeyachtclub
31+
ERC721 _nft = new ERC721(_nftProject, ChainId.ETH_MAINNET);
32+
Debug.Log("TEST NFT Calls");
33+
await _nft.Load();
34+
Debug.Log("\tname: "+_nft.Name);
35+
Debug.Log("\tsymbol: "+_nft.Symbol);
36+
Debug.Log("\ttotal supply: "+_nft.ValueFromDecimals(_nft.TotalSupply));
37+
38+
List<NFT> _nfts = await _nft.GetOwnerNFTs("0xf7801B8115f3Fe46AC55f8c0Fdb5243726bdb66A");
39+
40+
41+
} catch (System.Exception _e) {
42+
Debug.LogWarning("[TestERC721Calls] Tests Failed: "+_e);
43+
return false;
44+
}
45+
46+
return true;
1947
}
2048

49+
// Tokens
2150
private async Task<bool> TestERC20Calls() {
2251
try {
2352
// ERC20 _token = new ERC20("0x1A2933fbA0c6e959c9A2D2c933f3f8AD4aa9f06e", ChainId.ETH_MAINNET);
@@ -45,7 +74,7 @@ private async Task<bool> TestERC20Calls() {
4574
Debug.Log("\ttotal supply: "+_token.ValueFromDecimals(_totalSupply));
4675

4776
// // standard calls
48-
// Debug.Log("\nStandard ERC20 Data");
77+
Debug.Log("\nStandard ERC20 Data");
4978
BigInteger _balance = await _token.GetBalanceOf("0x34221445c2dd9fd3f41a8a8bfa7d49ec898e0ef4");
5079
BigInteger _allowance = await _token.GetAllowance("0xbd0dbb9fddc73b6ebffc7c09cfae1b19d6dece40", Constants.ADDR_UNISWAPV2);
5180
Debug.Log("\nOther ERC20 Calls");
@@ -205,7 +234,7 @@ private async Task<bool> TestArrayCalls() {
205234
}
206235

207236
Debug.Log("TEST: getStrArr()");
208-
_out = await _token.CallFunction("getStrArr(string[])", new string[]{"string[]"}, new string[]{"string[](abcqest,qwtyr68,bdflflelaela823)"});
237+
_out = await _token.CallFunction("getStrArr(string[])", new string[]{"string[]"}, new string[]{"string[](asfsdfsdfgsfdgsdfgdsbcasfsdfsdfgdfgga,123,ldksjflsjf;safjllfkjdsa;flkjasdflkjsfsdfdfgdfgkljlakjfal;kwjkljglkjawe,f31)"});
209238
string[] _strarr = (string[])_out[0];
210239
foreach(string _s in _strarr) {
211240
Debug.Log("\t"+_s);
@@ -231,4 +260,12 @@ private async Task<bool> TestArrayCalls() {
231260

232261
return true;
233262
}
234-
}
263+
}
264+
/*
265+
0000000000000000000000000000000000000000000000000000000000000020
266+
0000000000000000000000000000000000000000000000000000000000000001
267+
0000000000000000000000000000000000000000000000000000000000000020
268+
0000000000000000000000000000000000000000000000000000000000000032
269+
6162637165737472776572776572776572776572776572776566646676646676
270+
6664676766686173646661736466686766680000000000000000000000000000
271+
*/

0 commit comments

Comments
 (0)