主页 > imtoken钱包新版下载 > 简单介绍bitcoincashjs的接口和功能

简单介绍bitcoincashjs的接口和功能

imtoken钱包新版下载 2023-03-03 07:35:44

简单介绍

这个用于 bitcoincashjs 的中间件比特币是什么文件格式,它是 bitcoin-lib 的一个分支。 看了下bitcoin-lib,发现bitcoincashjs确实继承了它的很多优点。 bitcoincashjs中间件主要实现创建交易的功能,以及多重签名的创建和消费功能。

和一些封装好的rpc的区别

就是这个不依赖服务器创建交易,也就是说使用这个中间件不需要连接网络,降低了私钥暴露的风险。 事务的创建在本地完成。 完成后通过网络发送交易(可以由别人提供)接口,也可以使用rpc发送到自己的服务器)返回一个交易号完成交易。 另外一个区别是bitcoincashjs内部实现了一些随机生成的地址、base58、签名等,这些是一般rpc所没有的,都是和服务器交互相关的。

下面简单介绍下bitcoincashjs 的一些接口和功能。

1.创建一个随机地址,这个很简单比特币是什么文件格式,但是可能不会经常用到

const bch = require('bitcoincashjs');
const privateKey = new bch.PrivateKey();
const address = privateKey.toAddress();
console.log(address.toString()) 

这个可以在我们做钱包的时候用到。 当然最好是在前端生成地址和私钥,不然别人也不确定这行不行。

2.使用SHA256哈希值创建地址

const bch = require('bitcoincashjs');
const value = new Buffer('Bitcoin Cash - Peer-to-Peer Electronic Cash');
const hash = bch.crypto.Hash.sha256(value);
const bn = bch.crypto.BN.fromBuffer(hash);
const address = new bch.PrivateKey(bn).toAddress();
console.log(address.toString())

清查比特币挖矿文件_比特币是什么文件格式_808比特币创始人颜万卫 炮制比特币风险大

3.将地址转换为任何其他BCH地址

const bch = require('bitcoincashjs');
const Address = bch.Address;
const BitpayFormat = Address.BitpayFormat;
const CashAddrFormat = Address.CashAddrFormat;
const address = new Address('1MF7A5H2nHYYJMieouip2SkZiFZMBKqSZe');
console.log(address.toString()) // 1MF7A5H2nHYYJMieouip2SkZiFZMBKqSZe
console.log(address.toString(BitpayFormat)) // Cchzj7d6fLX5CVd5Vf3jbxNbLNmm4BTYuG
console.log(address.toString(CashAddrFormat)) // bitcoincash:qr0q67nsn66cf3klfufttr0vuswh3w5nt5jqpp20t9

4. 从任何比特币现金地址格式中读取地址

const bch = require('bitcoincashjs');
const Address = bch.Address;
const fromString = Address.fromString;
const BitpayFormat = Address.BitpayFormat;
const CashAddrFormat = Address.CashAddrFormat;
const legacy = fromString('1MF7A5H2nHYYJMieouip2SkZiFZMBKqSZe',
                  'livenet', 'pubkeyhash');
const bitpay = fromString('Cchzj7d6fLX5CVd5Vf3jbxNbLNmm4BTYuG',
                  'livenet', 'pubkeyhash', BitpayFormat);
const cashaddr = fromString('bitcoincash:qr0q67nsn66cf3klfufttr0vuswh3w5nt5jqpp20t9',
                  'livenet', 'pubkeyhash', CashAddrFormat);

808比特币创始人颜万卫 炮制比特币风险大_清查比特币挖矿文件_比特币是什么文件格式

5.通过WIF导入地址(这个很有用)

const bch = require('bitcoincashjs');
const wif = 'Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct';
const address = new bch.PrivateKey(wif).toAddress();
console.log(address.toString()) // 19AAjaTUbRjQCMuVczepkoPswiZRhjtg31

6.创建交易,这里只是一对一,如果要在这里创建二对二的交易

const bch = require('bitcoincashjs');
const privateKey = new bch.PrivateKey('L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy');
const utxo = {
  'txId' : '115e8f72f39fad874cfab0deed11a80f24f967a84079fb56ddf53ea02e308986',
  'outputIndex' : 0,
  'address' : '17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV',
  'script' : '76a91447862fe165e6121af80d5dde1ecb478ed170565b88ac',
  'satoshis' : 50000
};
const transaction = new bch.Transaction()
  .from(utxo)
  .to('1Gokm82v6DmtwKEB8AiVhm82hyFSsEvBDK', 15000)
  .sign(privateKey);
console.log(transaction.toString()) // 01000000018689302ea03ef...

808比特币创始人颜万卫 炮制比特币风险大_清查比特币挖矿文件_比特币是什么文件格式

7.验证比特币消息

const bch = require('bitcoincashjs');
const Message = bch.Message;
const message = new Message('Bitcoin Cash - Peer-to-Peer Electronic Cash.');
const address = '13Js7D3q4KvfSqgKN8LpNq57gcahrVc5JZ';
const signature = 'IJuZCwN/4HtIRulOb/zRLU1oCPVMiPvT5dJhgXxOuQNFaXoytoejPePUerSs9KSIvPL/BDimPe2cj/JabeDGmbc=';
console.log(message.verify(address, signature)) // true

8. 签署比特币信息

const bch = require('bitcoincashjs');
const Message = bch.Message;
const message = new Message('Bitcoin Cash - Peer-to-Peer Electronic Cash.');
const privateKey =
    new bch.PrivateKey('L23PpjkBQqpAF4vbMHNfTZAb3KFPBSawQ7KinFTzz7dxq6TZX8UA');
const signature = message.sign(privateKey);
console.log(signature.toString()) // IJuZCwN/4HtIRulOb/zRLU1oCP...

9. 创建一个 OP_RETURN 事务

const bch = require('bitcoincashjs');
const privateKey = new bch.PrivateKey('L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy');

808比特币创始人颜万卫 炮制比特币风险大_比特币是什么文件格式_清查比特币挖矿文件

const utxo = { 'txId' : '115e8f72f39fad874cfab0deed11a80f24f967a84079fb56ddf53ea02e308986', 'outputIndex' : 0, 'address' : '17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV', 'script' : '76a91447862fe165e6121af80d5dde1ecb478ed170565b88ac', 'satoshis' : 50000 }; const transaction = new bch.Transaction() .from(utxo) .addData('Bitcoin Cash - Peer-to-Peer Electronic Cash.') // Add OP_RETURN data //这一条是我自己加的,在之前没有加就一直报错,希望有同样错误的小伙伴注意一下 .to('mhMmYqtR9wzbW9otiurkG9AGVNzjfww36v', 999920000) .sign(privateKey); console.log(transaction.toString()) // 01000000018689302ea03ef...

创建OP_RETURN交易时,还要指定输出地址,官方教程中没有写。 导致我很长时间都无法正确调试。 希望有相同情况的朋友注意。

9.创建2-of-3多重签名P2SH地址

const bch = require('bitcoincashjs');
const publicKeys = [
  '026477115981fe981a6918a6297d9803c4dc04f328f22041bedff886bbc2962e01',
  '02c96db2302d19b43d4c69368babace7854cc84eb9e061cde51cfa77ca4a22b8b9',
  '03c6103b3b83e4a24a0e33a4df246ef11772f9992663db0c35759a5e2ebf68d8e9'
];
const requiredSignatures = 2;
const address = new bch.Address(publicKeys, requiredSignatures);

808比特币创始人颜万卫 炮制比特币风险大_比特币是什么文件格式_清查比特币挖矿文件

console.log(address.toString()) // 36NUkt6FWUi3LAWBqWRdDmdTWbt91Yvfu7

关于publicKeys的获取,我是在服务器端通过validateaddress命令获取publicKeys的,需要你有私钥。

10. 从 2-of-2 多重签名地址花钱

const bch = require('bitcoincashjs');
const privateKeys = [
  new bch.PrivateKey('91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgwmaKkrx'),
  new bch.PrivateKey('91avARGdfge8E4tZfYLoxeJ5sGBdNJQH4kvjJoQFacbgww7vXtT')
];
const publicKeys = privateKeys.map(bch.PublicKey);
const address = new bch.Address(publicKeys, 2); // 2 of 2
const utxo = {
  'txId' : '153068cdd81b73ec9d8dcce27f2c77ddda12dee3db424bff5cafdbe9f01c1756',
  'outputIndex' : 0,
  'address' : address.toString(),
  'script' : new bch.Script(address).toHex(),
  'satoshis' : 20000
};
const transaction = new bch.Transaction()
    .from(utxo, publicKeys, 2)
    .to('mtoKs9V381UAhUia3d7Vb9GNak8Qvmcsme', 20000)
    .sign(privateKeys);
console.log(transaction.toString()) // 010000000156171cf0e9dba...

上面的例子来自bitcoincashjs的GitHub。