work. mutable scripts.
This commit is contained in:
parent
5ae6a4e02c
commit
27b18c0fd2
@ -70,6 +70,7 @@ if (!utils.isBrowser)
|
|||||||
* @property {Function} profiler - {@link module:profiler}.
|
* @property {Function} profiler - {@link module:profiler}.
|
||||||
* @property {Function} ldb - See {@link module:ldb}.
|
* @property {Function} ldb - See {@link module:ldb}.
|
||||||
* @property {Function} script - {@link Script} constructor.
|
* @property {Function} script - {@link Script} constructor.
|
||||||
|
* @property {Function} opcode - {@link Opcode} constructor.
|
||||||
* @property {Function} stack - {@link Stack} constructor.
|
* @property {Function} stack - {@link Stack} constructor.
|
||||||
* @property {Function} witness - {@link Witness} constructor.
|
* @property {Function} witness - {@link Witness} constructor.
|
||||||
* @property {Function} input - {@link Input} constructor.
|
* @property {Function} input - {@link Input} constructor.
|
||||||
@ -147,6 +148,7 @@ function Environment(options) {
|
|||||||
this.profiler = require('./profiler');
|
this.profiler = require('./profiler');
|
||||||
this.timedata = require('./timedata');
|
this.timedata = require('./timedata');
|
||||||
this.script = require('./script');
|
this.script = require('./script');
|
||||||
|
this.opcode = this.script.Opcode;
|
||||||
this.stack = this.script.Stack;
|
this.stack = this.script.Stack;
|
||||||
this.witness = this.script.Witness;
|
this.witness = this.script.Witness;
|
||||||
this.address = require('./address');
|
this.address = require('./address');
|
||||||
|
|||||||
@ -452,8 +452,9 @@ MinerBlock.prototype.updateCommitment = function updateCommitment() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
MinerBlock.prototype.updateCoinbase = function updateCoinbase() {
|
MinerBlock.prototype.updateCoinbase = function updateCoinbase() {
|
||||||
this.coinbase.inputs[0].script[1] = bcoin.script.array(this.extraNonce);
|
var input = this.coinbase.inputs[0];
|
||||||
this.coinbase.inputs[0].script.refresh();
|
input.script.code[1] = bcoin.opcode.fromNumber(this.extraNonce);
|
||||||
|
input.script.compile();
|
||||||
this.coinbase.outputs[0].value = this.block.getReward(this.network);
|
this.coinbase.outputs[0].value = this.block.getReward(this.network);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1333,7 +1333,7 @@ TX.prototype.hasStandardInputs = function hasStandardInputs(flags) {
|
|||||||
if (stack.length === 0)
|
if (stack.length === 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
redeem = stack.getRedeem(false);
|
redeem = stack.getRedeem();
|
||||||
|
|
||||||
if (!redeem)
|
if (!redeem)
|
||||||
return false;
|
return false;
|
||||||
@ -1645,22 +1645,6 @@ TX.prototype.isWatched = function isWatched(filter) {
|
|||||||
if (!filter)
|
if (!filter)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
function testScript(code) {
|
|
||||||
var i, chunk;
|
|
||||||
|
|
||||||
for (i = 0; i < code.length; i++) {
|
|
||||||
chunk = code[i];
|
|
||||||
if (chunk === -1)
|
|
||||||
break;
|
|
||||||
if (!Buffer.isBuffer(chunk) || chunk.length === 0)
|
|
||||||
continue;
|
|
||||||
if (filter.test(chunk))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1. Test the tx hash
|
// 1. Test the tx hash
|
||||||
if (filter.test(this.hash()))
|
if (filter.test(this.hash()))
|
||||||
found = true;
|
found = true;
|
||||||
@ -1670,7 +1654,7 @@ TX.prototype.isWatched = function isWatched(filter) {
|
|||||||
for (i = 0; i < this.outputs.length; i++) {
|
for (i = 0; i < this.outputs.length; i++) {
|
||||||
output = this.outputs[i];
|
output = this.outputs[i];
|
||||||
// Test the output script
|
// Test the output script
|
||||||
if (testScript(output.script.toArray())) {
|
if (output.script.test(filter)) {
|
||||||
if (filter.update === constants.filterFlags.ALL) {
|
if (filter.update === constants.filterFlags.ALL) {
|
||||||
outpoint = bcoin.protocol.framer.outpoint(this.hash(), i);
|
outpoint = bcoin.protocol.framer.outpoint(this.hash(), i);
|
||||||
filter.add(outpoint);
|
filter.add(outpoint);
|
||||||
@ -1700,11 +1684,11 @@ TX.prototype.isWatched = function isWatched(filter) {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Test the input script
|
// Test the input script
|
||||||
if (testScript(input.script.toArray()))
|
if (input.script.test(filter))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Test the witness
|
// Test the witness
|
||||||
// if (testScript(input.witness.items))
|
// if (input.witness.test(filter))
|
||||||
// return true;
|
// return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -32,7 +32,7 @@ describe('Script', function() {
|
|||||||
|
|
||||||
it('should encode/decode numbers', function() {
|
it('should encode/decode numbers', function() {
|
||||||
var script = [0, 0x51, 0x52, 0x60];
|
var script = [0, 0x51, 0x52, 0x60];
|
||||||
var encoded = bcoin.script.encodeArray(script);
|
var encoded = bcoin.script.fromArray(script).raw;
|
||||||
var decoded = bcoin.script.decode(encoded).map(function(op) { return op.value; });
|
var decoded = bcoin.script.decode(encoded).map(function(op) { return op.value; });
|
||||||
assert.deepEqual(decoded, script);
|
assert.deepEqual(decoded, script);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,6 +7,8 @@ var network = bcoin.protocol.network;
|
|||||||
var utils = bcoin.utils;
|
var utils = bcoin.utils;
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
|
|
||||||
|
var FAKE_SIG = new Buffer([0,0,0,0,0,0,0,0,0]);
|
||||||
|
|
||||||
var KEY1 = 'xprv9s21ZrQH143K3Aj6xQBymM31Zb4BVc7wxqfUhMZrzewdDVCt'
|
var KEY1 = 'xprv9s21ZrQH143K3Aj6xQBymM31Zb4BVc7wxqfUhMZrzewdDVCt'
|
||||||
+ 'qUP9iWfcHgJofs25xbaUpCps9GDXj83NiWvQCAkWQhVj5J4CorfnpKX94AZ';
|
+ 'qUP9iWfcHgJofs25xbaUpCps9GDXj83NiWvQCAkWQhVj5J4CorfnpKX94AZ';
|
||||||
|
|
||||||
@ -227,8 +229,8 @@ describe('Wallet', function() {
|
|||||||
w.scriptInputs(fake, function(err) {
|
w.scriptInputs(fake, function(err) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
// Fake signature
|
// Fake signature
|
||||||
fake.inputs[0].script.code[0] = new Buffer([0,0,0,0,0,0,0,0,0]);
|
fake.inputs[0].script.code[0] = bcoin.opcode.fromData(FAKE_SIG);
|
||||||
fake.inputs[0].script.refresh();
|
fake.inputs[0].script.compile();
|
||||||
// balance: 11000
|
// balance: 11000
|
||||||
|
|
||||||
// Fake TX should temporarly change output
|
// Fake TX should temporarly change output
|
||||||
@ -696,8 +698,8 @@ describe('Wallet', function() {
|
|||||||
if (witness) {
|
if (witness) {
|
||||||
send.inputs[0].witness.items[2] = new Buffer([]);
|
send.inputs[0].witness.items[2] = new Buffer([]);
|
||||||
} else {
|
} else {
|
||||||
send.inputs[0].script.code[2] = 0;
|
send.inputs[0].script.code[2] = new bcoin.opcode(0);
|
||||||
send.inputs[0].script.refresh();
|
send.inputs[0].script.compile();
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(!send.verify(flags));
|
assert(!send.verify(flags));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user