Add claim encoding for payment channels

This commit is contained in:
Ben Sharafian
2017-03-30 19:18:09 +02:00
parent e0aa8b6db3
commit 8d0d772835
4 changed files with 42 additions and 2 deletions

View File

@@ -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,

View File

@@ -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 = {

View File

@@ -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

View File

@@ -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(''))
})
});