Skip to content

A Payment Channel Network (PCN) using Path Hash Time Lock Contract (PHTLC)

License

Notifications You must be signed in to change notification settings

PRIEWIENV/BytomLit

Repository files navigation

An Anti-Wormhole Payment Channel Network on Bytom

A payment channel network daemon based on Bytom using Path Hashed Time Locked Contract (PHTLC) instead of Hashed Time Locked Contract (HTLC), which is robust against wormhole attack.

Quick Start

Build

cd BytomLit
make

Run

# You can modify the config.json
./node config.json

Usage

curl -X POST 127.0.0.1:9000/<api> -d '<parameter>'

JSON-RPC API List

  • dual-fund: Open a channel between A and B.
    • inputs: JSON array [aInput, bInput, gasInput]. Input from A, input from B and input for tx gas, respectively.
    • program: string. Control program of the input.
    • source_id: string.
    • source_pos: integer.
    • asset_id: string.
    • amount: integer. Amount of the asset to be fund to open a channel.
    • arguments: string.
    • aPub: string. Pubkey from A to lock the funding tx in the output.
    • bPub: string. Pubkey from B to lock the funding tx in the output.
  • push: Pay a certain amount of asset from A to B or from B to A.
    • amount: integer. The amount of the asset to be paid. Remark: amount > 0: A -> B; amount < 0: B -> A.
  • close: Close the established channel.
    • receipt: string. Close the established channel by submit receipt to Bytom chain.

Demo

# Send dual-funding transaction to Bytom chain. The response is supposed to be
# a tx id.
curl -X POST 127.0.0.1:9000/dual-fund -d '{
  "inputs": [
    {
      "source_id":"dcdd21f5775d8205519204a9e8380632ba6d255f5d9f83640f7f00fe0414c942",
      "source_pos": 2,
      "program": "0014f077b8a83998adfa8df7c529e8643cfebce2dff8",
      "asset_id": "f08f0da2b982fdc7aab517de724be5e5eed1c49330826501c88a261ae9cb0edf",
      "amount": 10000000000000000
    },
    {
      "source_id": "dcdd21f5775d8205519204a9e8380632ba6d255f5d9f83640f7f00fe0414c942",
      "source_pos": 1,
      "program": "001472e49786aea9ae75a5ec4543259b6d10c2c4f57d",
      "asset_id": "f08f0da2b982fdc7aab517de724be5e5eed1c49330826501c88a261ae9cb0edf",
      "amount": 10000000000000000
    },
    {
      "source_id": "d9b60b8b3d1e3d249b0efaefddd50a2bcc846f5462a2903c228d3c39b6dfcdf3",
      "source_pos": 0,
      "program": "001472e49786aea9ae75a5ec4543259b6d10c2c4f57d",
      "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
      "amount": 41250000000
    }
  ],
  "pubkey_a": "b7e5e40c0de6d4cd0048968f047f1ed05215e04e03b7ce22f92ade9ff0791c5d",
  "pubkey_b": "343132656a747d98a40488fcd68670f6723abb1f29dfaba36a3b6af18c6360d4"
}'
# Send several BTLs (a user-defined asset for test) to another address. The
# response is supposed to be a signed raw transaction
curl -X POST 127.0.0.1:9000/push -d '{"amount": 0}'
# Send the close-channel transaction (latest signed raw transaction got from
# "/push") to Bytom chain. The response is supposed to be a tx id.
curl -X POST 127.0.0.1:9000/close -d '{"receipt":"0701000201b90101b6017423542dade2528182812b199eafedc8cb013f04dcf62ddae0c4ef207bfd4e8af08f0da2b982fdc7aab517de724be5e5eed1c49330826501c88a261ae9cb0edf808084fea6dee11101016b5a20343132656a747d98a40488fcd68670f6723abb1f29dfaba36a3b6af18c6360d420b7e5e40c0de6d4cd0048968f047f1ed05215e04e03b7ce22f92ade9ff0791c5d7424537a641b000000537a547a526bae547a547a526c7cad63240000007bcd9f697b7cae7cac00c0c5010440fd083f7923f88d5a3d427e6519d149573d34fcdbf18d583ecd26d5ac2dba198b2cd5a455140dea12746a80df80daf6312173941fe4d4d28aadeb72549f04140240f3fae7a1734cb144c75e5d370ffcf42c746ce9008d0121551751da06d0ebbb30d0886fbf0966b713572350afb10b537a4585252cc2065f9b8dcbd939e2f1c10c2018cd420713da2b5075f5282dc0ab8abd32e0ad0ec611ddc936d866e04297310120d1a80162ad4c529000196b1c44d8bcb07b045190779648a1441e31d086d2e71d0161015f409fa556dad4ab99f1cedf78656b9221231aa70f06cb531e4df068127598582effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8099c4d59901000116001472e49786aea9ae75a5ec4543259b6d10c2c4f57d6302400903027dc48f4352d08169be7cf7d44e6cf5e2f373d9f666bbd4729ee52c6751c69d52dc868992dae1900a814adf3fcbd41a87a64b4a9c677f93119cf7f59c0020d1a80162ad4c529000196b1c44d8bcb07b045190779648a1441e31d086d2e71d020140f08f0da2b982fdc7aab517de724be5e5eed1c49330826501c88a261ae9cb0edf808084fea6dee11101160014a796b852f5db234d4450f80260e5640faf3808ce00013effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ece1d0990101160014a796b852f5db234d4450f80260e5640faf3808ce00"}'

About

A Payment Channel Network (PCN) using Path Hash Time Lock Contract (PHTLC)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published