Skip to content

Commit

Permalink
Merge pull request #20 from huming0618/feature/change-amino
Browse files Browse the repository at this point in the history
[improve]添加 js-amino 包
  • Loading branch information
zhangwen9229 committed May 15, 2019
2 parents 2dc69b5 + f046842 commit f801838
Show file tree
Hide file tree
Showing 52 changed files with 273 additions and 2,887 deletions.
2 changes: 1 addition & 1 deletion build/webpack.base.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ module.exports = {
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test')],
include: [resolve('src'), resolve('test'), resolve('node_modules/js-amino')],
},
{
test: /[\\\/]tweetnacl[\\\/]/,
Expand Down
10 changes: 5 additions & 5 deletions build/webpack.prod.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ const webpackConfig = merge(baseWebpackConfig, {
minimizer: [
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false,
},
warning: 'verbose',
// compress: {
// warnings: false,
// },
// warning: 'verbose',
ecma: 6,
beautify: false,
comments: false,
Expand Down Expand Up @@ -49,4 +49,4 @@ const webpackConfig = merge(baseWebpackConfig, {
],
})

module.exports = webpackConfig
module.exports = webpackConfig
2 changes: 1 addition & 1 deletion dist/cmjs/model/tx.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons

var bech32 = require('bech32');

var _require = require('../lib/Js-Amino/src/index'),
var _require = require('js-amino'),
Codec = _require.Codec;

var PubKeyEd25519 = _types2.default.PubKeyEd25519,
Expand Down
2 changes: 1 addition & 1 deletion dist/cmjs/model/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
value: true
});

var _require = require('../lib/Js-Amino/src'),
var _require = require('js-amino'),
TypeFactory = _require.TypeFactory,
Types = _require.Types;

Expand Down
328 changes: 164 additions & 164 deletions dist/cmjs/util/factory.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
value: true
});

var _tweetnacl = require('tweetnacl');
Expand Down Expand Up @@ -30,171 +30,171 @@ var _require = require('../lib/Js-Amino/src/index'),
Codec = _require.Codec;

var getHash256 = function getHash256(input) {
var sha256 = require('js-sha256');
var hash2 = sha256.update(input);
return hash2.array();
var sha256 = require('js-sha256');
var hash2 = sha256.update(input);
return hash2.array();
};
exports.default = {
/**
* 生成助记符
*/
genarateSeed: function genarateSeed() {
// 商 256,生成24个助记单词
var mnemonic = _bip2.default.generateMnemonic(256);
return mnemonic;
},

/**
* 生成公私钥对
* @param {string} mnemonic 助记符
* @returns {object} 公私钥对
*/
genarateKeyPair: function genarateKeyPair(mnemonic) {
console.log('mnemonic', mnemonic);
var hexSeed = _bip2.default.mnemonicToSeedHex(mnemonic);
var secret = (0, _ed25519HdKey.derivePath)("m/44'/148'/0'", hexSeed).key;
var keyPair = _tweetnacl2.default.sign.keyPair.fromSeed(secret);
// let secretKeyUint8 = keyPair.secretKey
// let naclKeys = nacl.sign.keyPair.fromSeed(secretKeyUint8)

// console.log('naclKeys', naclKeys)

return keyPair;
},

/**
* 获取链上地址
* @param {Uint8Array} publicKey 公钥
*/
getAddress: function getAddress(publicKey) {
var bech32 = require('bech32');
var publicKey_hash256 = getHash256(publicKey);
var addr_suffix = bech32.toWords(Buffer.from(publicKey_hash256.slice(0, 20)));

var addr = bech32.encode('address', addr_suffix);
return addr;
},

/**
* 签名
* @param {Uint8Array} msg
* @param {Uint8Array} secretKey
*/
sign: function sign(msg, secretKey) {
return _tweetnacl2.default.sign(msg, secretKey);
},
genarateTxMsg: function genarateTxMsg() {
var codec = new Codec();
var PubKeyEd25519 = _types2.default.PubKeyEd25519,
ITX = _types2.default.ITX,
AuthTx = _types2.default.AuthTx,
QSC = _types2.default.QSC,
Sender = _types2.default.Sender,
Receiver = _types2.default.Receiver,
Signature = _types2.default.Signature;

codec.registerConcrete(new PubKeyEd25519(), 'tendermint/PubKeyEd25519', {});
codec.registerConcrete(new ITX(), 'qos/txs/TransferTx', {});
codec.registerConcrete(new AuthTx(), 'qbase/txs/stdtx', {});
codec.registerConcrete(new Sender(), 'Sender', {});
codec.registerConcrete(new Receiver(), 'Sender', {});
codec.registerConcrete(new Signature(), 'Signature', {});

var seed = this.genarateSeed();
console.log('seed', seed);
var keyPair = this.genarateKeyPair(seed);
console.log('keyPair', keyPair);

console.log('publicKey hex', this.buf2hex(keyPair.publicKey));

var addr = this.getAddress(keyPair.publicKey);
console.log('addr', addr);

var pubKeyEd25519 = new PubKeyEd25519(keyPair.publicKey);

var qsc = new QSC('AOE', 5);
var sender = new Sender('address1k0m8ucnqug974maa6g36zw7g2wvfd4sug6uxay', 2, [qsc]);

console.log('sender: ', sender);

var receiver = new Receiver('address12as5uhdpf2y9zjkurx2l6dz8g98qkgryc4x355', 2, [qsc]);

var itx = new ITX([sender], [receiver]);

var privateKeyBuffers = _tool2.default.base64ToByteArray('k0m8ucnqug974maa6g36zw7g2wvfd4sug6uxay');
console.log('privateKeyBuffers', privateKeyBuffers);
console.log('privateKeyBuffers', privateKeyBuffers[0].buffer);
var tmpBy = this.buf2hex1(privateKeyBuffers[0]);
console.log('tmpBy:', tmpBy);

var signature = new Signature(pubKeyEd25519, 'JUTk/5Itlqv7VfjFwvARaEeJiAxfPhT4mCbbMVcF+MzYKkxXuz8f+PYTZeDIQ0W89/uTzBvQpn6Y1J8cyaCeBg==', 10);

var authTx = new AuthTx(itx, [signature], 'qos-test', 0);

// 最终生成的输出的JSON
var str = codec.marshalJson(authTx);

console.log('str', str);

//测试签名后数据是否正确
var privateKey = 'rpt3O80wAFI1+ZqNYt8DqJ5PaQ+foDq7G/InFfycoFYT8tgGFJLp+BSVELW2fTQNGZ/yTzTIXbu9fg33gOmmzA==';
var singdata = 'b3f67e6260e20beaefbdd223a13bc8539896d61c3257614e5da14a88514adc1995fd3447414e0b206432716f732d7465737400000000000000000000000000000007';

var by = Buffer.from(singdata, 'hex');
console.log(by);

var pk = (0, _tweetnaclUtil.decodeBase64)(privateKey);
console.log('pk', pk);

var pubkey = (0, _tweetnaclUtil.decodeBase64)('E/LYBhSS6fgUlRC1tn00DRmf8k80yF27vX4N94Dppsw=');
console.log('pubkey', pubkey);

console.log('Array.from(pk).slice(0,32)', Array.from(pk).slice(0, 32));
var publicKey = (0, _ed25519HdKey.getPublicKey)(Array.from(pk).slice(0, 32)).slice(1);
console.log('publicKey', publicKey);

/**快捷获取签名的from Hex或者 to Hex 值 --start*/
var bech32 = require('bech32');
var addr_decode = bech32.decode('address1k0m8ucnqug974maa6g36zw7g2wvfd4sug6uxay');
console.log('addr_decode', addr_decode);
var fromwords = bech32.fromWords(addr_decode.words);
console.log('fromwords', fromwords);
var fromHex = this.buf2hex(fromwords);
console.log('fromHex', fromHex);

/**快捷获取签名的from Hex或者 to Hex 值 --end*/

var publicKey_hash256 = getHash256(publicKey);
var publicKey_hash256_slice20 = Buffer.from(publicKey_hash256.slice(0, 20));

var publickeyHex = this.buf2hex1(publicKey_hash256_slice20);
console.log('pucpublickeyHex', publickeyHex);

var sd = _tweetnacl2.default.sign.detached(by, pk);
console.log(sd.buffer);
console.log(this.buf2hex(sd.buffer));
console.log((0, _tweetnaclUtil.encodeBase64)(sd));
},

/**
* buffer to hex
* @param {*} buffer buffer 数组
*/
buf2hex: function buf2hex(buffer) {
return Array.prototype.map.call(new Uint8Array(buffer), function (x) {
return ('00' + x.toString(16)).slice(-2);
}).join('');
},

/**
* buffer to hex
* @param {*} buffer buffer 数组
*/
buf2hex1: function buf2hex1(uint8Array) {
return Array.prototype.map.call(uint8Array, function (x) {
return ('00' + x.toString(16)).slice(-2);
}).join('');
}
/**
* 生成助记符
*/
genarateSeed: function genarateSeed() {
// 商 256,生成24个助记单词
var mnemonic = _bip2.default.generateMnemonic(256);
return mnemonic;
},

/**
* 生成公私钥对
* @param {string} mnemonic 助记符
* @returns {object} 公私钥对
*/
genarateKeyPair: function genarateKeyPair(mnemonic) {
console.log('mnemonic', mnemonic);
var hexSeed = _bip2.default.mnemonicToSeedHex(mnemonic);
var secret = (0, _ed25519HdKey.derivePath)("m/44'/148'/0'", hexSeed).key;
var keyPair = _tweetnacl2.default.sign.keyPair.fromSeed(secret);
// let secretKeyUint8 = keyPair.secretKey
// let naclKeys = nacl.sign.keyPair.fromSeed(secretKeyUint8)

// console.log('naclKeys', naclKeys)

return keyPair;
},

/**
* 获取链上地址
* @param {Uint8Array} publicKey 公钥
*/
getAddress: function getAddress(publicKey) {
var bech32 = require('bech32');
var publicKey_hash256 = getHash256(publicKey);
var addr_suffix = bech32.toWords(Buffer.from(publicKey_hash256.slice(0, 20)));

var addr = bech32.encode('address', addr_suffix);
return addr;
},

/**
* 签名
* @param {Uint8Array} msg
* @param {Uint8Array} secretKey
*/
sign: function sign(msg, secretKey) {
return _tweetnacl2.default.sign(msg, secretKey);
},
genarateTxMsg: function genarateTxMsg() {
var codec = new Codec();
var PubKeyEd25519 = _types2.default.PubKeyEd25519,
ITX = _types2.default.ITX,
AuthTx = _types2.default.AuthTx,
QSC = _types2.default.QSC,
Sender = _types2.default.Sender,
Receiver = _types2.default.Receiver,
Signature = _types2.default.Signature;

codec.registerConcrete(new PubKeyEd25519(), 'tendermint/PubKeyEd25519', {});
codec.registerConcrete(new ITX(), 'qos/txs/TransferTx', {});
codec.registerConcrete(new AuthTx(), 'qbase/txs/stdtx', {});
codec.registerConcrete(new Sender(), 'Sender', {});
codec.registerConcrete(new Receiver(), 'Sender', {});
codec.registerConcrete(new Signature(), 'Signature', {});

var seed = this.genarateSeed();
console.log('seed', seed);
var keyPair = this.genarateKeyPair(seed);
console.log('keyPair', keyPair);

console.log('publicKey hex', this.buf2hex(keyPair.publicKey));

var addr = this.getAddress(keyPair.publicKey);
console.log('addr', addr);

var pubKeyEd25519 = new PubKeyEd25519(keyPair.publicKey);

var qsc = new QSC('AOE', 5);
var sender = new Sender('address1k0m8ucnqug974maa6g36zw7g2wvfd4sug6uxay', 2, [qsc]);

console.log('sender: ', sender);

var receiver = new Receiver('address12as5uhdpf2y9zjkurx2l6dz8g98qkgryc4x355', 2, [qsc]);

var itx = new ITX([sender], [receiver]);

var privateKeyBuffers = _tool2.default.base64ToByteArray('k0m8ucnqug974maa6g36zw7g2wvfd4sug6uxay');
console.log('privateKeyBuffers', privateKeyBuffers);
console.log('privateKeyBuffers', privateKeyBuffers[0].buffer);
var tmpBy = this.buf2hex1(privateKeyBuffers[0]);
console.log('tmpBy:', tmpBy);

var signature = new Signature(pubKeyEd25519, 'JUTk/5Itlqv7VfjFwvARaEeJiAxfPhT4mCbbMVcF+MzYKkxXuz8f+PYTZeDIQ0W89/uTzBvQpn6Y1J8cyaCeBg==', 10);

var authTx = new AuthTx(itx, [signature], 'qos-test', 0);

// 最终生成的输出的JSON
var str = codec.marshalJson(authTx);

console.log('str', str);

//测试签名后数据是否正确
var privateKey = 'rpt3O80wAFI1+ZqNYt8DqJ5PaQ+foDq7G/InFfycoFYT8tgGFJLp+BSVELW2fTQNGZ/yTzTIXbu9fg33gOmmzA==';
var singdata = 'b3f67e6260e20beaefbdd223a13bc8539896d61c3257614e5da14a88514adc1995fd3447414e0b206432716f732d7465737400000000000000000000000000000007';

var by = Buffer.from(singdata, 'hex');
console.log(by);

var pk = (0, _tweetnaclUtil.decodeBase64)(privateKey);
console.log('pk', pk);

var pubkey = (0, _tweetnaclUtil.decodeBase64)('E/LYBhSS6fgUlRC1tn00DRmf8k80yF27vX4N94Dppsw=');
console.log('pubkey', pubkey);

console.log('Array.from(pk).slice(0,32)', Array.from(pk).slice(0, 32));
var publicKey = (0, _ed25519HdKey.getPublicKey)(Array.from(pk).slice(0, 32)).slice(1);
console.log('publicKey', publicKey);

/**快捷获取签名的from Hex或者 to Hex 值 --start*/
var bech32 = require('bech32');
var addr_decode = bech32.decode('address1k0m8ucnqug974maa6g36zw7g2wvfd4sug6uxay');
console.log('addr_decode', addr_decode);
var fromwords = bech32.fromWords(addr_decode.words);
console.log('fromwords', fromwords);
var fromHex = this.buf2hex(fromwords);
console.log('fromHex', fromHex);

/**快捷获取签名的from Hex或者 to Hex 值 --end*/

var publicKey_hash256 = getHash256(publicKey);
var publicKey_hash256_slice20 = Buffer.from(publicKey_hash256.slice(0, 20));

var publickeyHex = this.buf2hex1(publicKey_hash256_slice20);
console.log('pucpublickeyHex', publickeyHex);

var sd = _tweetnacl2.default.sign.detached(by, pk);
console.log(sd.buffer);
console.log(this.buf2hex(sd.buffer));
console.log((0, _tweetnaclUtil.encodeBase64)(sd));
},

/**
* buffer to hex
* @param {*} buffer buffer 数组
*/
buf2hex: function buf2hex(buffer) {
return Array.prototype.map.call(new Uint8Array(buffer), function (x) {
return ('00' + x.toString(16)).slice(-2);
}).join('');
},

/**
* buffer to hex
* @param {*} buffer buffer 数组
*/
buf2hex1: function buf2hex1(uint8Array) {
return Array.prototype.map.call(uint8Array, function (x) {
return ('00' + x.toString(16)).slice(-2);
}).join('');
}
};

// function buf2hex(buffer) { // buffer is an ArrayBuffer
Expand Down
Loading

0 comments on commit f801838

Please sign in to comment.