start updating docs.
This commit is contained in:
parent
9d727cebae
commit
239902b752
104
README.md
104
README.md
@ -66,10 +66,13 @@ pool.on('error', function(err) {
|
|||||||
utils.print('Error: %s', err.message);
|
utils.print('Error: %s', err.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Instantiate an HD wallet with a serialized xprivkey
|
// Instantiate an HD wallet with a mnemonic
|
||||||
var wallet = new bcoin.wallet({
|
var wallet = new bcoin.wallet({
|
||||||
hd: {
|
type: 'pubkeyhash',
|
||||||
xkey: process.env.XPRIVKEY || process.argv[2]
|
derivation: 'bip44',
|
||||||
|
accountIndex: 0,
|
||||||
|
master: {
|
||||||
|
mnemonic: process.env.BCOIN_MNEMONIC || process.argv[2]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
utils.print('Opened wallet with address: %s', wallet.getAddress());
|
utils.print('Opened wallet with address: %s', wallet.getAddress());
|
||||||
@ -148,11 +151,7 @@ tx.addOutput({
|
|||||||
|
|
||||||
// Fill the transaction inputs with the
|
// Fill the transaction inputs with the
|
||||||
// necessary unspents (hopefully we have them!).
|
// necessary unspents (hopefully we have them!).
|
||||||
tx.fill(
|
wallet.fill(tx, { fee: null }); // We could put a hard fee here, but lets let bcoin figure it out
|
||||||
wallet.getUnspent(), // Our unspents to choose from
|
|
||||||
wallet.getAddress(), // Our change address (warning: address re-use)
|
|
||||||
null // We could put a hard fee here, but lets let bcoin figure it out
|
|
||||||
);
|
|
||||||
|
|
||||||
// Sign the transaction and place
|
// Sign the transaction and place
|
||||||
// all signatures in necessary inputs
|
// all signatures in necessary inputs
|
||||||
@ -216,34 +215,34 @@ var pool = bcoin.pool({
|
|||||||
});
|
});
|
||||||
|
|
||||||
var buyer = bcoin.wallet({
|
var buyer = bcoin.wallet({
|
||||||
type: 'scripthash',
|
type: 'multisig',
|
||||||
subtype: 'multisig',
|
derivation: 'bip44',
|
||||||
m: 2,
|
m: 2,
|
||||||
n: 3
|
n: 3
|
||||||
});
|
});
|
||||||
|
|
||||||
var seller = bcoin.wallet({
|
var seller = bcoin.wallet({
|
||||||
type: 'scripthash',
|
type: 'multisig',
|
||||||
subtype: 'multisig',
|
derivation: 'bip44',
|
||||||
m: 2,
|
m: 2,
|
||||||
n: 3
|
n: 3
|
||||||
});
|
});
|
||||||
|
|
||||||
var mediator = bcoin.wallet({
|
var mediator = bcoin.wallet({
|
||||||
type: 'scripthash',
|
type: 'multisig',
|
||||||
subtype: 'multisig',
|
derivation: 'bip44',
|
||||||
m: 2,
|
m: 2,
|
||||||
n: 3
|
n: 3
|
||||||
});
|
});
|
||||||
|
|
||||||
buyer.addKey(seller.getPublicKey());
|
buyer.addKey(seller.accountKey);
|
||||||
buyer.addKey(mediator.getPublicKey());
|
buyer.addKey(mediator.accountKey);
|
||||||
|
|
||||||
seller.addKey(buyer.getPublicKey());
|
seller.addKey(buyer.accountKey);
|
||||||
seller.addKey(mediator.getPublicKey());
|
seller.addKey(mediator.accountKey);
|
||||||
|
|
||||||
mediator.addKey(buyer.getPublicKey());
|
mediator.addKey(buyer.accountKey);
|
||||||
mediator.addKey(seller.getPublicKey());
|
mediator.addKey(seller.accountKey);
|
||||||
|
|
||||||
// We should all have the same p2sh address
|
// We should all have the same p2sh address
|
||||||
utils.assert(buyer.getScriptAddress() === seller.getScriptAddress());
|
utils.assert(buyer.getScriptAddress() === seller.getScriptAddress());
|
||||||
@ -262,7 +261,7 @@ var btx = bcoin.tx();
|
|||||||
// Send 25 BTC to the shared wallet
|
// Send 25 BTC to the shared wallet
|
||||||
// to buy something from seller.
|
// to buy something from seller.
|
||||||
btx.addOutput({
|
btx.addOutput({
|
||||||
address: buyer.getScriptAddress(),
|
address: buyer.getAddress(),
|
||||||
value: utils.satoshi('25.0')
|
value: utils.satoshi('25.0')
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -349,7 +348,8 @@ The above script could be redeemed with:
|
|||||||
|
|
||||||
``` js
|
``` js
|
||||||
tx2.addInput({
|
tx2.addInput({
|
||||||
prevout: { tx: tx, hash: tx.hash('hex'), index: 0 },
|
prevout: { hash: tx.hash('hex'), index: 0 },
|
||||||
|
output: bcoin.coin(tx, 0),
|
||||||
sequence: 0xffffffff,
|
sequence: 0xffffffff,
|
||||||
script: [
|
script: [
|
||||||
signature, // Byte Array
|
signature, // Byte Array
|
||||||
@ -395,36 +395,6 @@ script: [
|
|||||||
];
|
];
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Custom Scripts
|
|
||||||
|
|
||||||
Bcoin will allow you to use custom P2SH scripts, but it's up to you to
|
|
||||||
redeem/sign it property.
|
|
||||||
|
|
||||||
``` js
|
|
||||||
var wallet = bcoin.wallet({
|
|
||||||
redeem: [
|
|
||||||
1,
|
|
||||||
'1add',
|
|
||||||
'equal'
|
|
||||||
]
|
|
||||||
});
|
|
||||||
console.log(wallet.getScriptAddress());
|
|
||||||
var tx1 = bcoin.tx().addOutput(wallet.getScriptAddress(), new bn(100000));
|
|
||||||
```
|
|
||||||
|
|
||||||
Which would be redeemed with:
|
|
||||||
|
|
||||||
``` js
|
|
||||||
tx2.addInput({
|
|
||||||
prevout: { tx: tx1, hash: tx1.hash('hex'), index: 0 },
|
|
||||||
script: [
|
|
||||||
2,
|
|
||||||
// Redeem script:
|
|
||||||
wallet.getScript()
|
|
||||||
]
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Big Numbers
|
### Big Numbers
|
||||||
|
|
||||||
Bitcoin deals with really big numbers on a regular basis. Javascript Numbers
|
Bitcoin deals with really big numbers on a regular basis. Javascript Numbers
|
||||||
@ -438,7 +408,7 @@ var bn = bcoin.bn;
|
|||||||
...
|
...
|
||||||
|
|
||||||
// Add an output with 100,000 satoshis as a value.
|
// Add an output with 100,000 satoshis as a value.
|
||||||
tx.addOutput(wallet.getKeyAddress(), new bn(100000));
|
tx.addOutput(wallet.getAddress(), new bn(100000));
|
||||||
```
|
```
|
||||||
|
|
||||||
To make this easier to deal with, bcoin has two helper functions: `utils.btc()`
|
To make this easier to deal with, bcoin has two helper functions: `utils.btc()`
|
||||||
@ -567,16 +537,16 @@ pool.on('fork', function(tip1, tip2) {
|
|||||||
// the fork is resolved:
|
// the fork is resolved:
|
||||||
db.get(tip1, function(err, block) {
|
db.get(tip1, function(err, block) {
|
||||||
block.txs.forEach(function(tx) {
|
block.txs.forEach(function(tx) {
|
||||||
db.remove(tx.hash('hex'));
|
db.del(tx.hash('hex'));
|
||||||
});
|
});
|
||||||
|
db.del(tip1);
|
||||||
});
|
});
|
||||||
db.get(tip2, function(err, block) {
|
db.get(tip2, function(err, block) {
|
||||||
block.txs.forEach(function(tx) {
|
block.txs.forEach(function(tx) {
|
||||||
db.remove(tx.hash('hex'));
|
db.del(tx.hash('hex'));
|
||||||
});
|
});
|
||||||
|
db.del(tip2);
|
||||||
});
|
});
|
||||||
db.remove(tip1);
|
|
||||||
db.remove(tip2);
|
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -589,9 +559,6 @@ Transaction building happens in 4 stages:
|
|||||||
fee, and potential addition of a change address.
|
fee, and potential addition of a change address.
|
||||||
3. __Scripting__: Compilation of the of the input scripts (minus the
|
3. __Scripting__: Compilation of the of the input scripts (minus the
|
||||||
signatures). This will fill `n` empty signature slots (`OP_0`).
|
signatures). This will fill `n` empty signature slots (`OP_0`).
|
||||||
- __Potential recalculation of the fee__: Now that the redeem script is
|
|
||||||
available to the primitive TX object, it can likely calculate a lower fee.
|
|
||||||
Add value to the change address if the fee is lower than we thought.
|
|
||||||
4. __Signing__: Signing of the inputs. If this is a multisig transaction, we
|
4. __Signing__: Signing of the inputs. If this is a multisig transaction, we
|
||||||
have to wait for other signers to sign it before it is finalized.
|
have to wait for other signers to sign it before it is finalized.
|
||||||
- __Finalization__: Once the final signer signs the transaction, empty
|
- __Finalization__: Once the final signer signs the transaction, empty
|
||||||
@ -924,7 +891,8 @@ Deserialized option data:
|
|||||||
- Inherits all from Object.
|
- Inherits all from Object.
|
||||||
- All options.
|
- All options.
|
||||||
- __data__ - Normalized and deserialized data.
|
- __data__ - Normalized and deserialized data.
|
||||||
- __hdpub__ - Corresponding HDPublicKey object (present on HDPrivateKeys only).
|
- __hdPublicKey__ - Corresponding HDPublicKey object (present on HDPrivateKeys
|
||||||
|
only).
|
||||||
- __xpubkey__ - Serialized xpubkey base58 string.
|
- __xpubkey__ - Serialized xpubkey base58 string.
|
||||||
- __xprivkey__ - Serialized xprivkey base58 string.
|
- __xprivkey__ - Serialized xprivkey base58 string.
|
||||||
|
|
||||||
@ -951,9 +919,9 @@ Usage: `bcoin.input([options])`
|
|||||||
|
|
||||||
##### Options:
|
##### Options:
|
||||||
|
|
||||||
- __out.tx__ - Reference to the previous output's transaction (optional).
|
- __prevout.hash__ - Previous output's txid as a hex string.
|
||||||
- __out.hash__ - Previous output's txid as a hex string.
|
- __prevout.index__ - Previous output's index.
|
||||||
- __out.index__ - Previous output's index.
|
- __output__ - Previous output: a `bcoin.coin` object (coins must be filled).
|
||||||
- __script__ - Array of opcodes.
|
- __script__ - Array of opcodes.
|
||||||
- __sequence__ - Input's nSequence, `0xffffffff` by default.
|
- __sequence__ - Input's nSequence, `0xffffffff` by default.
|
||||||
|
|
||||||
@ -994,9 +962,7 @@ which parse the script and grab the previous output data and cache it as
|
|||||||
will only grab the first value and not deal with OP_IF statements, etc).
|
will only grab the first value and not deal with OP_IF statements, etc).
|
||||||
- __flags__ - Coinbase flags if present.
|
- __flags__ - Coinbase flags if present.
|
||||||
- __text__ - Coinbase flags converted to UTF-8, if present.
|
- __text__ - Coinbase flags converted to UTF-8, if present.
|
||||||
- __output__ - Previous Output object.
|
|
||||||
- __value__ - Value (satoshis/big number) of the previous output.
|
- __value__ - Value (satoshis/big number) of the previous output.
|
||||||
- __tx__ - Reference to the previous output's parent transaction.
|
|
||||||
|
|
||||||
##### Events:
|
##### Events:
|
||||||
|
|
||||||
@ -1132,7 +1098,9 @@ Usage: `bcoin.peer(pool, createConnection, options)`
|
|||||||
|
|
||||||
##### Options:
|
##### Options:
|
||||||
|
|
||||||
- __backoff__ - Time to delay socket creation in milliseconds.
|
- __host__
|
||||||
|
- __port__
|
||||||
|
- __socket__ - Pre-created socket for peer to use (optional).
|
||||||
|
|
||||||
##### Properties:
|
##### Properties:
|
||||||
|
|
||||||
@ -1429,7 +1397,7 @@ Usage: `bcoin.txPool(wallet)`
|
|||||||
- Inherits all from EventEmitter.
|
- Inherits all from EventEmitter.
|
||||||
- __add(tx)__ - Add TX to the pool.
|
- __add(tx)__ - Add TX to the pool.
|
||||||
- __getAll()__ - Return all TXes in the pool owned by wallet.
|
- __getAll()__ - Return all TXes in the pool owned by wallet.
|
||||||
- __getUnspent()__ - Return all TXes with unspent outputs, owned by wallet.
|
- __getUnspent()__ - Return all unspent outputs owned by wallet.
|
||||||
- __getPending()__ - Return all 0-confirmation transactions.
|
- __getPending()__ - Return all 0-confirmation transactions.
|
||||||
- __getBalance()__ - Return total balance of TX pool.
|
- __getBalance()__ - Return total balance of TX pool.
|
||||||
- __toJSON()__ - Return TX pool in serialized JSON format.
|
- __toJSON()__ - Return TX pool in serialized JSON format.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user