UNPKG

nerve-sdk-js

Version:
122 lines (98 loc) 4.68 kB
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var Signature = require("elliptic/lib/elliptic/ec/signature"); require('dotenv').config(); var ethers = require('ethers'); var nerve = require("../index"); function testEthPersonalSign() { return _testEthPersonalSign.apply(this, arguments); } function _testEthPersonalSign() { _testEthPersonalSign = _asyncToGenerator(function* () { var pri = process.env.acc0; var pub = nerve.getPubByPri(pri); console.log('pub', pub); var wallet = new ethers.Wallet(ethers.utils.hexZeroPad(ethers.utils.hexStripZeros('0x' + pri), 32)); var data = "WARNNING: You are signing a transaction on the nerve network. Please confirm the risk before signing.\n\n注意:你正在对 Nerve Network 网络的交易签名,请确认风险后再签名。\n\nTransaction Hash:\n"; var txHash = "d86cf03a175cdaf761d2eda25a98ce404d96ce0db2a4f25b25d46d604c7cdc5c"; data = data + txHash; console.log('data'); console.log(data); console.log('wallet.address', wallet.address); console.log('hashMessage', ethers.utils.hashMessage(Buffer.from(data, 'utf-8'))); var signData = yield wallet.signMessage(Buffer.from(data, 'utf-8')); console.log('signData', signData); signData = signData.slice(2); // 去掉0x var r = signData.slice(0, 64); var s = signData.slice(64, 128); var signature = new Signature({ r, s }).toDER("hex"); console.log("signatureDER", signature); }); return _testEthPersonalSign.apply(this, arguments); } function signTest() { var address = "0xD1091E22947a0b241fE4B9e03471FC345e04B1a2"; var hash = "d86cf03a175cdaf761d2eda25a98ce404d96ce0db2a4f25b25d46d604c7cdc5c"; var pub = "02558f01679b65ca1e0cb0ae31b2f0eea3aa001cf36f3fc14a92a95e1fe187334d"; var flat = "0x921d67caacd15bb8228d59ef5f6d458417bf536d36307eb4fcd99a9f28eb8a4e44d557f15998b68b2d3d556b01830d0c74c45cbbf94e6aa5d7fa485bfc4da70a1c"; flat = flat.slice(2); // 去掉0x var r = flat.slice(0, 64); var s = flat.slice(64, 128); // const recoveryParam = flat.slice(128) var signature = new Signature({ r, s }).toDER("hex"); console.log(signature, "signature"); } function personSignTest() { var pri = process.env.tron_test; var fromAddress = nerve.getAddressByPri(nerve.chainId(), pri); console.log(fromAddress); } function hashTest() { var hashHex = '0xd86cf03a175cdaf761d2eda25a98ce404d96ce0db2a4f25b25d46d604c7cdc5c'; if (hashHex.startsWith('0x')) { hashHex = hashHex.substring(2); } console.log('hash', hashHex); } hashTest(); // testEthPersonalSign(); function callOnWindows() { // 检查 MetaMask 是否可用 if (typeof window.ethereum !== 'undefined') { console.log('MetaMask is installed!'); // 异步函数以处理 MetaMask 操作 function signMessage() { return _signMessage.apply(this, arguments); } // 执行签名 function _signMessage() { _signMessage = _asyncToGenerator(function* () { try { // 请求连接 MetaMask 账户 var accounts = yield window.ethereum.request({ method: 'eth_requestAccounts' }); var account = accounts[0]; console.log('Connected account:', account); // 要签名的消息 var message = nerve.getSignMessageWithPS('d86cf03a175cdaf761d2eda25a98ce404d96ce0db2a4f25b25d46d604c7cdc5c'); // 转换为十六进制(personal_sign 要求) var hexMessage = "0x".concat(Buffer.from(message, 'utf8').toString('hex')); // 调用 personal_sign var signature = yield window.ethereum.request({ method: 'personal_sign', params: [hexMessage, account] }); console.log('Signature:', signature); console.log('Message:', message); console.log('Account:', account); } catch (error) { console.error('Error:', error.message); } }); return _signMessage.apply(this, arguments); } signMessage(); } else { console.error('MetaMask is not installed!'); } }