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 */
|
||||
|
||||
const BN = require('bn.js');
|
||||
const types = require('./types');
|
||||
const {HashPrefix} = require('./hash-prefixes');
|
||||
const {BinaryParser} = require('./serdes/binary-parser');
|
||||
@@ -30,6 +31,19 @@ function signingData(tx, prefix = HashPrefix.transactionSig) {
|
||||
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) {
|
||||
const prefix = HashPrefix.transactionMultiSig;
|
||||
const suffix = types.AccountID.from(signingAccount).toBytes();
|
||||
@@ -47,6 +61,7 @@ module.exports = {
|
||||
parseBytes,
|
||||
multiSigningData,
|
||||
signingData,
|
||||
signingClaimData,
|
||||
binaryToJSON,
|
||||
sha512Half,
|
||||
transactionID,
|
||||
|
||||
@@ -21,7 +21,9 @@ const HashPrefix = {
|
||||
// validation for signing
|
||||
validation: bytes(0x56414C00),
|
||||
// proposal for signing
|
||||
proposal: bytes(0x50525000)
|
||||
proposal: bytes(0x50525000),
|
||||
// payment channel claim
|
||||
paymentChannelClaim: bytes(0x434C4D00)
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -3,6 +3,7 @@ const coreTypes = require('./coretypes');
|
||||
const {quality,
|
||||
binary: {bytesToHex,
|
||||
signingData,
|
||||
signingClaimData,
|
||||
multiSigningData,
|
||||
binaryToJSON,
|
||||
serializeObject}} = coreTypes;
|
||||
@@ -22,6 +23,11 @@ function encodeForSigning(json) {
|
||||
return bytesToHex(signingData(json));
|
||||
}
|
||||
|
||||
function encodeForSigningClaim(json) {
|
||||
assert(typeof json === 'object');
|
||||
return bytesToHex(signingClaimData(json));
|
||||
}
|
||||
|
||||
function encodeForMultisigning(json, signer) {
|
||||
assert(typeof json === 'object');
|
||||
assert.equal(json.SigningPubKey, '');
|
||||
@@ -42,6 +48,7 @@ module.exports = {
|
||||
decode,
|
||||
encode,
|
||||
encodeForSigning,
|
||||
encodeForSigningClaim,
|
||||
encodeForMultisigning,
|
||||
encodeQuality,
|
||||
decodeQuality
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const _ = require('lodash');
|
||||
const assert = require('assert-diff');
|
||||
const {encodeForSigning, encodeForMultisigning} = require('../src');
|
||||
const {encodeForSigning, encodeForSigningClaim, encodeForMultisigning} =
|
||||
require('../src');
|
||||
|
||||
const tx_json = {
|
||||
Account: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ',
|
||||
@@ -101,4 +102,19 @@ describe('Signing data', function() {
|
||||
'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