mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-20 04:05:52 +00:00
Add claim encoding for payment channels
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
/* eslint-disable func-style */
|
/* eslint-disable func-style */
|
||||||
|
|
||||||
|
const BN = require('bn.js');
|
||||||
const types = require('./types');
|
const types = require('./types');
|
||||||
const {HashPrefix} = require('./hash-prefixes');
|
const {HashPrefix} = require('./hash-prefixes');
|
||||||
const {BinaryParser} = require('./serdes/binary-parser');
|
const {BinaryParser} = require('./serdes/binary-parser');
|
||||||
@@ -30,6 +31,19 @@ function signingData(tx, prefix = HashPrefix.transactionSig) {
|
|||||||
return serializeObject(tx, {prefix, signingFieldsOnly: true});
|
return serializeObject(tx, {prefix, signingFieldsOnly: true});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function signingClaimData(claim) {
|
||||||
|
const prefix = HashPrefix.paymentChannelClaim
|
||||||
|
const channel = types.Hash256.from(claim.channel).toBytes()
|
||||||
|
const amount = new types.UInt64(new BN(claim.amount)).toBytes();
|
||||||
|
|
||||||
|
const bytesList = new BytesList();
|
||||||
|
|
||||||
|
bytesList.put(prefix)
|
||||||
|
bytesList.put(channel)
|
||||||
|
bytesList.put(amount)
|
||||||
|
return bytesList.toBytes()
|
||||||
|
}
|
||||||
|
|
||||||
function multiSigningData(tx, signingAccount) {
|
function multiSigningData(tx, signingAccount) {
|
||||||
const prefix = HashPrefix.transactionMultiSig;
|
const prefix = HashPrefix.transactionMultiSig;
|
||||||
const suffix = types.AccountID.from(signingAccount).toBytes();
|
const suffix = types.AccountID.from(signingAccount).toBytes();
|
||||||
@@ -47,6 +61,7 @@ module.exports = {
|
|||||||
parseBytes,
|
parseBytes,
|
||||||
multiSigningData,
|
multiSigningData,
|
||||||
signingData,
|
signingData,
|
||||||
|
signingClaimData,
|
||||||
binaryToJSON,
|
binaryToJSON,
|
||||||
sha512Half,
|
sha512Half,
|
||||||
transactionID,
|
transactionID,
|
||||||
|
|||||||
@@ -21,7 +21,9 @@ const HashPrefix = {
|
|||||||
// validation for signing
|
// validation for signing
|
||||||
validation: bytes(0x56414C00),
|
validation: bytes(0x56414C00),
|
||||||
// proposal for signing
|
// proposal for signing
|
||||||
proposal: bytes(0x50525000)
|
proposal: bytes(0x50525000),
|
||||||
|
// payment channel claim
|
||||||
|
paymentChannelClaim: bytes(0x434C4D00)
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const coreTypes = require('./coretypes');
|
|||||||
const {quality,
|
const {quality,
|
||||||
binary: {bytesToHex,
|
binary: {bytesToHex,
|
||||||
signingData,
|
signingData,
|
||||||
|
signingClaimData,
|
||||||
multiSigningData,
|
multiSigningData,
|
||||||
binaryToJSON,
|
binaryToJSON,
|
||||||
serializeObject}} = coreTypes;
|
serializeObject}} = coreTypes;
|
||||||
@@ -22,6 +23,11 @@ function encodeForSigning(json) {
|
|||||||
return bytesToHex(signingData(json));
|
return bytesToHex(signingData(json));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function encodeForSigningClaim(json) {
|
||||||
|
assert(typeof json === 'object');
|
||||||
|
return bytesToHex(signingClaimData(json));
|
||||||
|
}
|
||||||
|
|
||||||
function encodeForMultisigning(json, signer) {
|
function encodeForMultisigning(json, signer) {
|
||||||
assert(typeof json === 'object');
|
assert(typeof json === 'object');
|
||||||
assert.equal(json.SigningPubKey, '');
|
assert.equal(json.SigningPubKey, '');
|
||||||
@@ -42,6 +48,7 @@ module.exports = {
|
|||||||
decode,
|
decode,
|
||||||
encode,
|
encode,
|
||||||
encodeForSigning,
|
encodeForSigning,
|
||||||
|
encodeForSigningClaim,
|
||||||
encodeForMultisigning,
|
encodeForMultisigning,
|
||||||
encodeQuality,
|
encodeQuality,
|
||||||
decodeQuality
|
decodeQuality
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const assert = require('assert-diff');
|
const assert = require('assert-diff');
|
||||||
const {encodeForSigning, encodeForMultisigning} = require('../src');
|
const {encodeForSigning, encodeForSigningClaim, encodeForMultisigning} =
|
||||||
|
require('../src');
|
||||||
|
|
||||||
const tx_json = {
|
const tx_json = {
|
||||||
Account: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ',
|
Account: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ',
|
||||||
@@ -101,4 +102,19 @@ describe('Signing data', function() {
|
|||||||
'C0A5ABEF242802EFED4B041E8F2D4A8CC86AE3D1'].join('')
|
'C0A5ABEF242802EFED4B041E8F2D4A8CC86AE3D1'].join('')
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('can create claim blob', function() {
|
||||||
|
const channel =
|
||||||
|
'43904CBFCDCEC530B4037871F86EE90BF799DF8D2E0EA564BC8A3F332E4F5FB1'
|
||||||
|
const amount = '1000'
|
||||||
|
const json = {channel, amount}
|
||||||
|
const actual = encodeForSigningClaim(json)
|
||||||
|
assert.equal(actual, [
|
||||||
|
// hash prefix
|
||||||
|
'434C4D00',
|
||||||
|
// channel ID
|
||||||
|
'43904CBFCDCEC530B4037871F86EE90BF799DF8D2E0EA564BC8A3F332E4F5FB1',
|
||||||
|
// amount as a uint64
|
||||||
|
'00000000000003E8'
|
||||||
|
].join(''))
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user