nerve-sdk-js
Version:
nerve nerve-js nerve-sdk nerve-js-sdk
122 lines (98 loc) • 4.68 kB
JavaScript
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!');
}
}