Skip to content

Commit 58f42da

Browse files
committed
Resolve & Reverse Resolve ENS Util Support
1 parent f56bb20 commit 58f42da

File tree

4 files changed

+68470
-65461
lines changed

4 files changed

+68470
-65461
lines changed

Assets/Thirdweb/Core/Plugin/thirdweb.jslib

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,52 @@ var plugin = {
459459
dynCall_viii(cb, idPtr, null, buffer);
460460
});
461461
},
462+
ThirdwebResolveENSFromAddress: async function (taskId, address, cb) {
463+
// convert taskId from pointer to str and allocate it to keep in memory
464+
var id = UTF8ToString(taskId);
465+
var idSize = lengthBytesUTF8(id) + 1;
466+
var idPtr = _malloc(idSize);
467+
stringToUTF8(id, idPtr, idSize);
468+
// execute bridge call
469+
window.bridge
470+
.resolveENSFromAddress(UTF8ToString(address))
471+
.then((returnStr) => {
472+
var bufferSize = lengthBytesUTF8(returnStr) + 1;
473+
var buffer = _malloc(bufferSize);
474+
stringToUTF8(returnStr, buffer, bufferSize);
475+
dynCall_viii(cb, idPtr, buffer, null);
476+
})
477+
.catch((err) => {
478+
var msg = err.message;
479+
var bufferSize = lengthBytesUTF8(msg) + 1;
480+
var buffer = _malloc(bufferSize);
481+
stringToUTF8(msg, buffer, bufferSize);
482+
dynCall_viii(cb, idPtr, null, buffer);
483+
});
484+
},
485+
ThirdwebResolveAddressFromENS: async function (taskId, ens, cb) {
486+
// convert taskId from pointer to str and allocate it to keep in memory
487+
var id = UTF8ToString(taskId);
488+
var idSize = lengthBytesUTF8(id) + 1;
489+
var idPtr = _malloc(idSize);
490+
stringToUTF8(id, idPtr, idSize);
491+
// execute bridge call
492+
window.bridge
493+
.resolveAddressFromENS(UTF8ToString(ens))
494+
.then((returnStr) => {
495+
var bufferSize = lengthBytesUTF8(returnStr) + 1;
496+
var buffer = _malloc(bufferSize);
497+
stringToUTF8(returnStr, buffer, bufferSize);
498+
dynCall_viii(cb, idPtr, buffer, null);
499+
})
500+
.catch((err) => {
501+
var msg = err.message;
502+
var bufferSize = lengthBytesUTF8(msg) + 1;
503+
var buffer = _malloc(bufferSize);
504+
stringToUTF8(msg, buffer, bufferSize);
505+
dynCall_viii(cb, idPtr, null, buffer);
506+
});
507+
},
462508
};
463509

464510
mergeInto(LibraryManager.library, plugin);

Assets/Thirdweb/Core/Scripts/Bridge.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,40 @@ public static async Task<bool> SmartWalletIsDeployed()
415415
return JsonConvert.DeserializeObject<Result<bool>>(result).result;
416416
}
417417

418+
public static async Task<string> ResolveENSFromAddress(string address)
419+
{
420+
if (!Utils.IsWebGLBuild())
421+
{
422+
ThirdwebDebug.LogWarning("Interacting with the thirdweb SDK is not fully supported in the editor.");
423+
return "";
424+
}
425+
string taskId = Guid.NewGuid().ToString();
426+
var task = new TaskCompletionSource<string>();
427+
taskMap[taskId] = task;
428+
#if UNITY_WEBGL
429+
ThirdwebResolveENSFromAddress(taskId, address, jsCallback);
430+
#endif
431+
string result = await task.Task;
432+
return JsonConvert.DeserializeObject<Result<string>>(result).result;
433+
}
434+
435+
public static async Task<string> ResolveAddressFromENS(string ens)
436+
{
437+
if (!Utils.IsWebGLBuild())
438+
{
439+
ThirdwebDebug.LogWarning("Interacting with the thirdweb SDK is not fully supported in the editor.");
440+
return "";
441+
}
442+
string taskId = Guid.NewGuid().ToString();
443+
var task = new TaskCompletionSource<string>();
444+
taskMap[taskId] = task;
445+
#if UNITY_WEBGL
446+
ThirdwebResolveAddressFromENS(taskId, ens, jsCallback);
447+
#endif
448+
string result = await task.Task;
449+
return JsonConvert.DeserializeObject<Result<string>>(result).result;
450+
}
451+
418452
#if UNITY_WEBGL
419453
[DllImport("__Internal")]
420454
private static extern string ThirdwebInvoke(string taskId, string route, string payload, Action<string, string, string> cb);
@@ -456,6 +490,10 @@ public static async Task<bool> SmartWalletIsDeployed()
456490
private static extern string ThirdwebGetSignerAddress(string taskId, Action<string, string, string> cb);
457491
[DllImport("__Internal")]
458492
private static extern string ThirdwebSmartWalletIsDeployed(string taskId, Action<string, string, string> cb);
493+
[DllImport("__Internal")]
494+
private static extern string ThirdwebResolveENSFromAddress(string taskId, string address, Action<string, string, string> cb);
495+
[DllImport("__Internal")]
496+
private static extern string ThirdwebResolveAddressFromENS(string taskId, string ens, Action<string, string, string> cb);
459497
#endif
460498
}
461499
}

Assets/Thirdweb/Core/Scripts/Utils.cs

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -394,19 +394,53 @@ public static string CidToIpfsUrl(this string cid, bool useGateway = false)
394394
return useGateway ? ipfsRaw.ReplaceIPFS() : ipfsRaw;
395395
}
396396

397-
public async static Task<string> GetENSName(string address)
397+
public async static Task<string> ResolveAddressFromENS(string ens)
398398
{
399+
if (string.IsNullOrEmpty(ens) || !ens.EndsWith(".eth"))
400+
return ens;
401+
399402
try
400403
{
401-
var ensService = new Nethereum.Contracts.Standards.ENS.ENSService(
402-
new Nethereum.Web3.Web3("https://ethereum.rpc.thirdweb.com/339d65590ba0fa79e4c8be0af33d64eda709e13652acb02c6be63f5a1fbef9c3").Eth,
403-
"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
404-
);
405-
return await ensService.ReverseResolveAsync(address);
404+
string address = null;
405+
if (IsWebGLBuild())
406+
{
407+
address = await Bridge.ResolveAddressFromENS(ens);
408+
}
409+
else
410+
{
411+
var ensService = new Nethereum.Contracts.Standards.ENS.ENSService(new Web3("https://1.rpc.thirdweb.com/").Eth, "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e");
412+
address = await ensService.ResolveAddressAsync(ens);
413+
}
414+
return string.IsNullOrEmpty(address) ? ens : address;
415+
}
416+
catch
417+
{
418+
return ens;
419+
}
420+
}
421+
422+
public async static Task<string> ResolveENSFromAddress(string address)
423+
{
424+
if (string.IsNullOrEmpty(address) || address.Length != 42 || !address.StartsWith("0x"))
425+
return address;
426+
427+
try
428+
{
429+
string ens = null;
430+
if (IsWebGLBuild())
431+
{
432+
ens = await Bridge.ResolveENSFromAddress(address);
433+
}
434+
else
435+
{
436+
var ensService = new Nethereum.Contracts.Standards.ENS.ENSService(new Web3("https://1.rpc.thirdweb.com/").Eth, "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e");
437+
ens = await ensService.ReverseResolveAsync(address);
438+
}
439+
return string.IsNullOrEmpty(ens) ? address : ens;
406440
}
407441
catch
408442
{
409-
return null;
443+
return address;
410444
}
411445
}
412446

0 commit comments

Comments
 (0)