You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
3.0 KiB
Plaintext

mergeInto(LibraryManager.library, {
EnableEthereum: async function (gameObjectName, callback, fallback) {
const parsedObjectName = UTF8ToString(gameObjectName);
const parsedCallback = UTF8ToString(callback);
const parsedFallback = UTF8ToString(fallback);
try {
const accounts = await ethereum.request({
method: "eth_requestAccounts",
});
ethereum.autoRefreshOnNetworkChange = false;
SendMessage(parsedObjectName, parsedCallback, accounts[0]);
} catch (error) {
SendMessage(parsedObjectName, parsedFallback, error.message);
}
},
EthereumInit: function (gameObjectName, callBackAccountChange, callBackChainChange) {
const parsedObjectName = UTF8ToString(gameObjectName);
const parsedCallbackAccountChange = UTF8ToString(callBackAccountChange);
const parsedCallbackChainChange = UTF8ToString(callBackChainChange);
ethereum.on("accountsChanged", function (accounts) {
let account = accounts[0] !== undefined ? accounts[0] : "";
SendMessage(parsedObjectName, parsedCallbackAccountChange, account);
});
ethereum.on("chainChanged", function (chainId) {
SendMessage(parsedObjectName, parsedCallbackChainChange, chainId.toString());
});
},
GetChainId: async function (gameObjectName, callback, fallback) {
const parsedObjectName = UTF8ToString(gameObjectName);
const parsedCallback = UTF8ToString(callback);
const parsedFallback = UTF8ToString(fallback);
try {
const chainId = await ethereum.request({ method: "eth_chainId" });
SendMessage(parsedObjectName, parsedCallback, chainId.toString());
} catch (error) {
SendMessage(parsedObjectName, parsedFallback, error.message);
}
},
IsMetamaskAvailable: function () {
return window.ethereum ? true : false;
},
GetSelectedAddress: function () {
var returnValue = ethereum.selectedAddress;
if (returnValue !== null) {
var bufferSize = lengthBytesUTF8(returnValue) + 1;
var buffer = _malloc(bufferSize);
stringToUTF8(returnValue, buffer, bufferSize);
return buffer;
}
},
Request: async function (message, gameObjectName, callback, fallback) {
const parsedMessageStr = UTF8ToString(message);
const parsedObjectName = UTF8ToString(gameObjectName);
const parsedCallback = UTF8ToString(callback);
const parsedFallback = UTF8ToString(fallback);
let parsedMessage = JSON.parse(parsedMessageStr);
try {
const response = await ethereum.request(parsedMessage);
let rpcResponse = {
jsonrpc: "2.0",
result: response,
id: parsedMessage.id,
error: null,
};
var json = JSON.stringify(rpcResponse);
SendMessage(parsedObjectName, parsedCallback, json);
} catch (e) {
let rpcResonseError = {
jsonrpc: "2.0",
id: parsedMessage.id,
error: {
message: e.message,
},
};
var json = JSON.stringify(rpcResonseError);
SendMessage(parsedObjectName, parsedFallback, json);
}
}
});