Add message signing
This commit is contained in:
parent
79f57f273d
commit
b97acab586
|
@ -1,14 +1,24 @@
|
||||||
using AntDesign;
|
using AntDesign;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Microsoft.JSInterop;
|
||||||
|
using Nethereum.Hex.HexConvertors.Extensions;
|
||||||
|
using Nethereum.JsonRpc.Client;
|
||||||
|
using Nethereum.JsonRpc.Client.RpcMessages;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using NftFaucet.Components;
|
using NftFaucet.Components;
|
||||||
using NftFaucet.Constants;
|
using NftFaucet.Constants;
|
||||||
using NftFaucet.Extensions;
|
using NftFaucet.Extensions;
|
||||||
using NftFaucet.Models.Enums;
|
using NftFaucet.Models.Enums;
|
||||||
|
using Serilog;
|
||||||
|
using RpcError = Nethereum.JsonRpc.Client.RpcError;
|
||||||
|
|
||||||
namespace NftFaucet.Pages;
|
namespace NftFaucet.Pages;
|
||||||
|
|
||||||
public class Step1Component : BasicComponent
|
public class Step1Component : BasicComponent
|
||||||
{
|
{
|
||||||
|
[Inject]
|
||||||
|
protected IJSRuntime JsRuntime { get; set; }
|
||||||
|
|
||||||
protected string NameErrorMessage { get; set; }
|
protected string NameErrorMessage { get; set; }
|
||||||
protected string DescriptionErrorMessage { get; set; }
|
protected string DescriptionErrorMessage { get; set; }
|
||||||
protected string ImageErrorMessage { get; set; }
|
protected string ImageErrorMessage { get; set; }
|
||||||
|
@ -122,4 +132,24 @@ public class Step1Component : BasicComponent
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<string> SignAsync(string message)
|
||||||
|
{
|
||||||
|
var rpcJsonResponse = await JsRuntime.InvokeAsync<string>("NethereumMetamaskInterop.Sign", message.ToHexUTF8());
|
||||||
|
var response = JsonConvert.DeserializeObject<RpcResponseMessage>(rpcJsonResponse);
|
||||||
|
if (response.HasError)
|
||||||
|
{
|
||||||
|
var rpcError = new RpcError(response.Error.Code, response.Error.Message, response.Error.Data);
|
||||||
|
throw new RpcResponseException(rpcError);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return response.GetResult<string>();
|
||||||
|
}
|
||||||
|
catch (FormatException formatException)
|
||||||
|
{
|
||||||
|
throw new RpcResponseFormatException("Invalid format found in RPC response", formatException);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
async function metamaskRequest(parsedMessage) {
|
||||||
|
try {
|
||||||
|
const response = await ethereum.request(parsedMessage);
|
||||||
|
let rpcResponse = {
|
||||||
|
jsonrpc: "2.0",
|
||||||
|
result: response,
|
||||||
|
id: parsedMessage.id,
|
||||||
|
error: null
|
||||||
|
}
|
||||||
|
|
||||||
|
return rpcResponse;
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
let rpcResonseError = {
|
||||||
|
jsonrpc: "2.0",
|
||||||
|
id: parsedMessage.id,
|
||||||
|
error: e
|
||||||
|
}
|
||||||
|
return rpcResonseError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getSelectedAddress() {
|
||||||
|
let accountsReponse = await getAddresses();
|
||||||
|
if (accountsReponse.error !== null) throw accountsReponse.error;
|
||||||
|
return accountsReponse.result[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getAddresses() {
|
||||||
|
return await metamaskRequest({ method: 'eth_requestAccounts' });
|
||||||
|
}
|
||||||
|
|
||||||
|
window.NethereumMetamaskInterop = {
|
||||||
|
Sign: async (utf8HexMsg) => {
|
||||||
|
try {
|
||||||
|
const from = await getSelectedAddress();
|
||||||
|
const params = [utf8HexMsg, from];
|
||||||
|
const method = 'personal_sign';
|
||||||
|
const rpcResponse = await metamaskRequest({
|
||||||
|
method,
|
||||||
|
params,
|
||||||
|
from
|
||||||
|
});
|
||||||
|
return JSON.stringify(rpcResponse);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
let rpcResponseError = {
|
||||||
|
jsonrpc: "2.0",
|
||||||
|
id: parsedMessage.id,
|
||||||
|
error: e
|
||||||
|
}
|
||||||
|
return JSON.stringify(rpcResponseError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,6 +31,7 @@
|
||||||
<script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>
|
<script src="_content/BlazorMonaco/lib/monaco-editor/min/vs/editor/editor.main.js"></script>
|
||||||
<script src="_content/BlazorMonaco/jsInterop.js"></script>
|
<script src="_content/BlazorMonaco/jsInterop.js"></script>
|
||||||
<script src="_framework/blazor.webassembly.js"></script>
|
<script src="_framework/blazor.webassembly.js"></script>
|
||||||
|
<script src="NethereumMetamask.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in New Issue