@dashevo/dashcore-lib
Advanced tools
Comparing version 1.0.0-alpha.5 to 1.0.0-alpha.8
@@ -8,2 +8,2 @@ module.exports = require('./transaction'); | ||
module.exports.Sighash = require('./sighash'); | ||
module.exports.SpecialTransactions = require('./specialtransactions'); | ||
module.exports.Payload = require('./payload'); |
@@ -28,5 +28,4 @@ 'use strict'; | ||
var BN = require('../crypto/bn'); | ||
var registeredTransactionTypes = require('./specialtransactions/constants').registeredTransactionTypes; | ||
var payloadParser = require('./specialtransactions/payload/payloadparser'); | ||
var specialTransactionConstants = require('./specialtransactions/constants'); | ||
var Payload = require('./payload'); | ||
var registeredTransactionTypes = Payload.constants.registeredTransactionTypes; | ||
@@ -92,3 +91,3 @@ /** | ||
Transaction.TYPES = specialTransactionConstants.registeredTransactionTypes; | ||
Transaction.TYPES = registeredTransactionTypes; | ||
@@ -311,3 +310,3 @@ /* Constructors and Serialization */ | ||
if (this.isSpecialTransaction() && this.hasExtraPayload()) { | ||
var payload = payloadParser.serializePayloadToBuffer(this.extraPayload); | ||
var payload = Payload.serializeToBuffer(this.extraPayload); | ||
writer.writeVarintNum(payload.length); | ||
@@ -349,3 +348,3 @@ writer.write(payload); | ||
var payloadBuffer = reader.read(extraPayloadSize); | ||
this.setExtraPayload(payloadParser.parsePayloadBuffer(this.type, payloadBuffer)); | ||
this.setExtraPayload(Payload.parseBuffer(this.type, payloadBuffer)); | ||
} | ||
@@ -389,3 +388,3 @@ } | ||
obj.type = this.type; | ||
obj.extraPayload = payloadParser.serializePayloadToJSON(this.extraPayload); | ||
obj.extraPayload = Payload.serializeToJSON(this.extraPayload); | ||
} | ||
@@ -441,3 +440,3 @@ return obj; | ||
this.type = transaction.type; | ||
this.setExtraPayload(payloadParser.parsePayloadJSON(transaction.type, transaction.extraPayload)) | ||
this.setExtraPayload(Payload.parseJSON(transaction.type, transaction.extraPayload)) | ||
} | ||
@@ -1288,9 +1287,15 @@ this._checkConsistency(arg); | ||
/** | ||
* Set special transaction type | ||
* Set special transaction type and create an empty extraPayload | ||
* @param {number} type | ||
* @returns {Transaction} | ||
*/ | ||
Transaction.prototype.setSpecialTransactionType = function(type) { | ||
Transaction.prototype.setType = function(type) { | ||
if (Boolean(this.type)) { | ||
throw new Error('Type is already set'); | ||
} | ||
$.checkArgumentType(type, 'number'); | ||
this.type = type; | ||
this.setExtraPayload(Payload.create(type)); | ||
return this; | ||
@@ -1320,2 +1325,8 @@ }; | ||
Transaction.prototype.setExtraPayload = function(payload) { | ||
if (!Boolean(this.type)) { | ||
throw new Error('Transaction type is not set'); | ||
} | ||
if (!Payload.hasCorrectType(this.type, payload)) { | ||
throw new Error('Payload doesn\'t match the transaction type'); | ||
} | ||
this.extraPayload = payload; | ||
@@ -1330,5 +1341,14 @@ return this; | ||
Transaction.prototype.getExtraPayloadSize = function getExtraPayloadSize() { | ||
return payloadParser.serializePayloadToBuffer(this.extraPayload).length; | ||
return Payload.serializeToBuffer(this.extraPayload).length; | ||
}; | ||
Transaction.prototype.addFundingOutput = function addFundingOutput(fundingAmount) { | ||
var script = new Script().add('OP_RETURN'); | ||
var output = new Output({ | ||
satoshis: fundingAmount, | ||
script: script | ||
}); | ||
this.addOutput(output); | ||
}; | ||
module.exports = Transaction; |
{ | ||
"name": "@dashevo/dashcore-lib", | ||
"version": "1.0.0-alpha.5", | ||
"version": "1.0.0-alpha.8", | ||
"description": "A pure and powerful JavaScript Dash library.", | ||
@@ -5,0 +5,0 @@ "author": "BitPay <dev@bitpay.com>", |
@@ -18,9 +18,7 @@ 'use strict'; | ||
var Address = bitcore.Address; | ||
var Networks = bitcore.Networks; | ||
var Opcode = bitcore.Opcode; | ||
var errors = bitcore.errors; | ||
var BufferUtil = bitcore.util.buffer; | ||
var SpecialTransactions = bitcore.Transaction.SpecialTransactions; | ||
var SubTxRegisterPayload = SpecialTransactions.payload.SubTxRegisterPayload; | ||
var RegisteredTransactionTypes = SpecialTransactions.constants.registeredTransactionTypes; | ||
var Payload = bitcore.Transaction.Payload; | ||
var SubTxRegisterPayload = Payload.SubTxRegisterPayload; | ||
var RegisteredTransactionTypes = Payload.constants.registeredTransactionTypes; | ||
@@ -1290,6 +1288,7 @@ var transactionVector = require('../data/tx_creation'); | ||
var transaction = Transaction() | ||
.setType(Transaction.TYPES.TRANSACTION_SUBTX_REGISTER) | ||
.setExtraPayload(validPayload); | ||
// 2 bytes for payload version, 1 byte for username size | ||
var expectedPayloadSize = 2 + 1 + nameSize + SpecialTransactions.constants.PUBKEY_ID_SIZE; | ||
// 2 bytes for payload version, 1 byte for username size, and 1 is empty signature | ||
var expectedPayloadSize = 2 + 1 + nameSize + Payload.constants.PUBKEY_ID_SIZE + 1; | ||
var payloadSize = transaction.getExtraPayloadSize(); | ||
@@ -1304,4 +1303,4 @@ expect(payloadSize).to.be.equal(expectedPayloadSize); | ||
.change(fromAddress) | ||
.setType(RegisteredTransactionTypes.TRANSACTION_SUBTX_REGISTER) | ||
.setExtraPayload(validPayload) | ||
.setSpecialTransactionType(RegisteredTransactionTypes.TRANSACTION_SUBTX_REGISTER) | ||
.sign(privateKey); | ||
@@ -1315,2 +1314,12 @@ | ||
}); | ||
it('Should not be possible to set extra payload if transaction type is not set', function () { | ||
expect(function () { | ||
var transaction = Transaction() | ||
.from(simpleUtxoWith1BTC) | ||
.to(fromAddress, 10000) | ||
.change(fromAddress) | ||
.setExtraPayload(validPayload) | ||
.sign(privateKey); | ||
}).to.throw('Transaction type is not set'); | ||
}); | ||
it('Should be possible to serialize and deserialize special transaction from object', function() { | ||
@@ -1321,4 +1330,4 @@ var transaction = Transaction() | ||
.change(fromAddress) | ||
.setType(RegisteredTransactionTypes.TRANSACTION_SUBTX_REGISTER) | ||
.setExtraPayload(validPayload) | ||
.setSpecialTransactionType(RegisteredTransactionTypes.TRANSACTION_SUBTX_REGISTER) | ||
.sign(privateKey); | ||
@@ -1337,6 +1346,7 @@ | ||
.change(fromAddress) | ||
.setSpecialTransactionType(1) | ||
.sign(privateKey); | ||
.setType(Transaction.TYPES.TRANSACTION_SUBTX_REGISTER); | ||
expect(function () { transaction.serialize(); }).to.throw('Transaction payload size is invalid'); | ||
delete transaction.extraPayload; | ||
expect(function () { transaction.sign(privateKey).serialize(); }).to.throw('Transaction payload size is invalid'); | ||
}); | ||
@@ -1348,6 +1358,8 @@ it('Should throw when extra payload is set, but special transaction type is not set', function () { | ||
.change(fromAddress) | ||
.setType(Transaction.TYPES.TRANSACTION_SUBTX_REGISTER) | ||
.setExtraPayload(validPayload) | ||
.sign(privateKey); | ||
transaction.extraPayloadSize = 1; | ||
delete transaction.type; | ||
expect(function () { transaction.serialize(); }).to.throw('Special transaction type is not set'); | ||
@@ -1358,3 +1370,3 @@ }); | ||
it('Should return true if a transaction is qualified to be a special transaction', function () { | ||
var transaction = Transaction().setSpecialTransactionType(1); | ||
var transaction = Transaction().setType(Transaction.TYPES.TRANSACTION_COINBASE); | ||
@@ -1369,2 +1381,26 @@ expect(transaction.isSpecialTransaction()).to.be.true; | ||
}); | ||
describe('setType', function () { | ||
it('Should set type and create payload', function () { | ||
var transaction = new Transaction().setType(Transaction.TYPES.TRANSACTION_SUBTX_REGISTER); | ||
expect(transaction.type).to.be.equal(Transaction.TYPES.TRANSACTION_SUBTX_REGISTER); | ||
expect(transaction.extraPayload).to.be.an.instanceOf(SubTxRegisterPayload); | ||
}); | ||
it('Should not be able to set transaction type after it was already set', function () { | ||
var transaction = new Transaction().setType(Transaction.TYPES.TRANSACTION_SUBTX_REGISTER); | ||
expect(transaction.extraPayload).to.be.an.instanceOf(SubTxRegisterPayload); | ||
expect(function() { | ||
transaction.setType(Transaction.TYPES.TRANSACTION_NORMAL) | ||
}).to.throw('Type is already set'); | ||
}); | ||
it('Should throw if transaction type is unknown', function () { | ||
expect(function () { | ||
var transaction = new Transaction().setType(123367); | ||
}).to.throw('Unknown special transaction type'); | ||
}); | ||
}); | ||
}); | ||
@@ -1371,0 +1407,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
5948495
112716
163
1