wallet-http: pass network to the transaction options validator.
This commit is contained in:
parent
dd7249f601
commit
1ccbb79efc
3 changed files with 49 additions and 36 deletions
|
|
@ -5,12 +5,15 @@
|
|||
.eslint*
|
||||
.git*
|
||||
.mocharc*
|
||||
.nyc_output/
|
||||
.yarnignore
|
||||
bench/
|
||||
browser/hsd*
|
||||
build/
|
||||
coverage/
|
||||
docker_data/
|
||||
docs/
|
||||
eslint.config.cjs
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
package-lock.json
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ const HDPublicKey = require('../hd/public');
|
|||
const {Resource} = require('../dns/resource');
|
||||
const common = require('./common');
|
||||
|
||||
/** @typedef {import('../types').NetworkType} NetworkType */
|
||||
/** @typedef {ReturnType<Validator['fromRequest']>} RequestValidator */
|
||||
|
||||
/**
|
||||
* HTTP
|
||||
* @alias module:wallet.HTTP
|
||||
|
|
@ -459,7 +462,7 @@ class HTTP extends Server {
|
|||
this.post('/wallet/:id/send', async (req, res) => {
|
||||
const valid = Validator.fromRequest(req);
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
const tx = await req.wallet.send(options);
|
||||
|
||||
const details = await req.wallet.getDetails(tx.hash());
|
||||
|
|
@ -474,7 +477,7 @@ class HTTP extends Server {
|
|||
|
||||
// TODO: Add create TX with locks for used Coins and/or
|
||||
// adds to the pending list.
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
const tx = await req.wallet.createTX(options);
|
||||
|
||||
if (sign)
|
||||
|
|
@ -496,12 +499,12 @@ class HTTP extends Server {
|
|||
|
||||
enforce(raw, 'TX is required.');
|
||||
|
||||
const tx = MTX.decode(raw);
|
||||
tx.view = await req.wallet.getCoinView(tx);
|
||||
const mtx = MTX.decode(raw);
|
||||
mtx.view = await req.wallet.getCoinView(mtx);
|
||||
|
||||
await req.wallet.sign(tx, passphrase);
|
||||
await req.wallet.sign(mtx, passphrase);
|
||||
|
||||
res.json(200, tx.getJSON(this.network));
|
||||
res.json(200, mtx.getJSON(this.network));
|
||||
});
|
||||
|
||||
// Zap Wallet TXs
|
||||
|
|
@ -1072,7 +1075,7 @@ class HTTP extends Server {
|
|||
enforce(name, 'Name is required.');
|
||||
enforce(broadcast ? sign : true, 'Must sign when broadcasting.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
// TODO: Add abort signal to close when request closes.
|
||||
|
|
@ -1109,7 +1112,7 @@ class HTTP extends Server {
|
|||
enforce(lockup != null, 'Lockup is required.');
|
||||
enforce(broadcast ? sign : true, 'Must sign when broadcasting.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
// TODO: Add abort signal to close when request closes.
|
||||
|
|
@ -1148,7 +1151,7 @@ class HTTP extends Server {
|
|||
enforce(broadcastBid != null, 'broadcastBid is required.');
|
||||
enforce(broadcastBid ? sign : true, 'Must sign when broadcasting.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
const auctionTXs = await req.wallet.createAuctionTXs(
|
||||
name,
|
||||
bid,
|
||||
|
|
@ -1189,7 +1192,7 @@ class HTTP extends Server {
|
|||
|
||||
enforce(broadcast ? sign : true, 'Must sign when broadcasting.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
let tx;
|
||||
|
|
@ -1235,7 +1238,7 @@ class HTTP extends Server {
|
|||
|
||||
enforce(broadcast ? sign : true, 'Must sign when broadcasting.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
let tx;
|
||||
|
|
@ -1291,7 +1294,7 @@ class HTTP extends Server {
|
|||
return res.json(400);
|
||||
}
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
// TODO: Add abort signal to close when request closes.
|
||||
|
|
@ -1324,7 +1327,7 @@ class HTTP extends Server {
|
|||
enforce(broadcast ? sign : true, 'Must sign when broadcasting.');
|
||||
enforce(name, 'Must pass name.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
// TODO: Add abort signal to close when request closes.
|
||||
|
|
@ -1358,7 +1361,7 @@ class HTTP extends Server {
|
|||
enforce(address, 'Must pass address.');
|
||||
|
||||
const addr = Address.fromString(address, this.network);
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
// TODO: Add abort signal to close when request closes.
|
||||
|
|
@ -1391,7 +1394,7 @@ class HTTP extends Server {
|
|||
enforce(broadcast ? sign : true, 'Must sign when broadcasting.');
|
||||
enforce(name, 'Must pass name.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
// TODO: Add abort signal to close when request closes.
|
||||
|
|
@ -1424,7 +1427,7 @@ class HTTP extends Server {
|
|||
enforce(broadcast ? sign : true, 'Must sign when broadcasting.');
|
||||
enforce(name, 'Must pass name.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
// TODO: Add abort signal to close when request closes.
|
||||
|
|
@ -1455,7 +1458,7 @@ class HTTP extends Server {
|
|||
enforce(broadcast ? sign : true, 'Must sign when broadcasting.');
|
||||
enforce(name, 'Must pass name.');
|
||||
|
||||
const options = TransactionOptions.fromValidator(valid);
|
||||
const options = TransactionOptions.fromValidator(valid, this.network);
|
||||
|
||||
if (broadcast) {
|
||||
// TODO: Add abort signal to close when request closes.
|
||||
|
|
@ -1571,7 +1574,6 @@ class HTTP extends Server {
|
|||
|
||||
/**
|
||||
* Handle new websocket.
|
||||
* @private
|
||||
* @param {WebSocket} socket
|
||||
*/
|
||||
|
||||
|
|
@ -1823,22 +1825,24 @@ class TransactionOptions {
|
|||
* TransactionOptions
|
||||
* @alias module:http.TransactionOptions
|
||||
* @constructor
|
||||
* @param {Validator} valid
|
||||
* @param {RequestValidator} [valid]
|
||||
* @param {(NetworkType|Network)?} [network]
|
||||
*/
|
||||
|
||||
constructor(valid) {
|
||||
constructor(valid, network) {
|
||||
if (valid)
|
||||
return this.fromValidator(valid);
|
||||
return this.fromValidator(valid, network);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inject properties from Validator.
|
||||
* @private
|
||||
* @param {Validator} valid
|
||||
* @param {RequestValidator} valid
|
||||
* @param {(NetworkType|Network)?} [network]
|
||||
* @returns {TransactionOptions}
|
||||
*/
|
||||
|
||||
fromValidator(valid) {
|
||||
fromValidator(valid, network) {
|
||||
assert(valid);
|
||||
|
||||
this.rate = valid.u64('rate');
|
||||
|
|
@ -1863,10 +1867,11 @@ class TransactionOptions {
|
|||
for (const output of outputs) {
|
||||
const valid = new Validator(output);
|
||||
|
||||
let addr = valid.str('address');
|
||||
const addrstr = valid.str('address');
|
||||
let addr;
|
||||
|
||||
if (addr)
|
||||
addr = Address.fromString(addr, this.network);
|
||||
if (addrstr)
|
||||
addr = Address.fromString(addrstr, network);
|
||||
|
||||
let covenant = valid.obj('covenant');
|
||||
|
||||
|
|
@ -1884,15 +1889,16 @@ class TransactionOptions {
|
|||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
/**
|
||||
* Instantiate transaction options
|
||||
* from Validator.
|
||||
* @param {Validator} valid
|
||||
* @param {RequestValidator} [valid]
|
||||
* @param {(NetworkType|Network)?} [network]
|
||||
* @returns {TransactionOptions}
|
||||
*/
|
||||
|
||||
static fromValidator(valid) {
|
||||
return new this().fromValidator(valid);
|
||||
static fromValidator(valid, network) {
|
||||
return new this().fromValidator(valid, network);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -525,18 +525,22 @@ describe('Wallet HTTP', function() {
|
|||
it('should allow covenants with create tx', async () => {
|
||||
const {address} = await wallet.createChange('default');
|
||||
|
||||
const output = openOutput(name, address);
|
||||
const output = openOutput(name, address, network);
|
||||
|
||||
const tx = await wallet.createTX({outputs: [output]});
|
||||
const tx = await wallet.createTX({
|
||||
outputs: [output.getJSON(network)]
|
||||
});
|
||||
assert.equal(tx.outputs[0].covenant.type, types.OPEN);
|
||||
});
|
||||
|
||||
it('should allow covenants with send tx', async () => {
|
||||
const {address} = await wallet.createChange('default');
|
||||
|
||||
const output = openOutput(name, address);
|
||||
const output = openOutput(name, address, network);
|
||||
|
||||
const tx = await wallet.send({outputs: [output]});;
|
||||
const tx = await wallet.send({
|
||||
outputs: [output.getJSON(network)]
|
||||
});;
|
||||
assert.equal(tx.outputs[0].covenant.type, types.OPEN);
|
||||
});
|
||||
|
||||
|
|
@ -2703,12 +2707,12 @@ describe('Wallet HTTP', function() {
|
|||
});
|
||||
|
||||
// create an OPEN output
|
||||
function openOutput(name, address) {
|
||||
function openOutput(name, address, network) {
|
||||
const nameHash = rules.hashName(name);
|
||||
const rawName = Buffer.from(name, 'ascii');
|
||||
|
||||
const output = new Output();
|
||||
output.address = Address.fromString(address);
|
||||
output.address = Address.fromString(address, network);
|
||||
output.value = 0;
|
||||
output.covenant.setOpen(nameHash, rawName);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue