Skip to content

xssnick/ton-payment-network

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

34 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

TON Payment Network

This is an implementation of a peer-to-peer payment network with multi-node routing based on the power of the TON Blockchain. More powerful than lightning!

ВСхничСскоС описаниС

Π‘Π΅Ρ‚ΡŒ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΡ€Π°Π½Π³ΠΎΠ²Ρ‹Ρ… ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ связи ΠΌΠ΅ΠΆΠ΄Ρƒ собой с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ дСплоя смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΈ ΠΏΠΎ сСти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ RLDP.

ΠŸΠ»Π°Ρ‚Π΅ΠΆΠ½Π°Ρ Π½ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сСрвисом, Ссли основная Ρ†Π΅Π»ΡŒ - Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π½Π° обслуТивании Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ), Ссли Ρ†Π΅Π»ΡŒ - прСдоставлСниС ΠΈΠ»ΠΈ ΠΎΠΏΠ»Π°Ρ‚Π° услуг, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ TON Storage ΠΈ TON Proxy.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ взаимодСйствия: Untitled Diagram drawio(3)

Onchain ΠΊΠ°Π½Π°Π»Ρ‹

КаТдая Π½ΠΎΠ΄Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ отслСТиваСт Π½ΠΎΠ²Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π² сСти ΠΈ Π²Ρ‹Π»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ обновлСния, связанныС с Π΅Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°ΠΌΠΈ. НапримСр, появлСниС Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² с Π΅Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°Π½Π°Π», ΠΈ события, связанныС с нСсогласованным Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ.

Если Π½ΠΎΠ΄Π° Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ связь с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½ΠΎΠ΄ΠΎΠΉ, ΠΎΠ½Π° Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½. ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ содСрТит 2 ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π°: свой ΠΈ сосСдский. Другая Π½ΠΎΠ΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π² сСти, провСряСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΈ, Ссли всС Π² порядкС, позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с собой сСтСвоС соСдинСниС.

Для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ сСти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ сообщСниС формируСтся ΠΈΠ· adnl адрСсов сторон ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ подписываСтся ΠΊΠ»ΡŽΡ‡Π΅ΠΌ ΠΊΠ°Π½Π°Π»Π°, ΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΠ΅ сообщСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ adnl адрСса ΠΏΠΎΠΌΠ΅Π½Π΅Π½Ρ‹Π΅ мСстами, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ ΠΈ подпись Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈΠ· любой Ρ‚ΠΎΡ‡ΠΊΠΈ сСти Π² Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Ссли сущСствуСт Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ΄Π°ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠ½Ρ‡Π΅ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ сСтСвоС соСдинСниС. ΠŸΡ€ΠΈ этом для создания ΠΈ закрытия Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π½Π΅ трСбуСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий ΠΎΠ½Ρ‡Π΅ΠΈΠ½.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ характСристики, ΠΊΠ°ΠΊ:

  • ΠšΠ»ΡŽΡ‡
  • ВрСмя ΠΆΠΈΠ·Π½ΠΈ
  • Π•ΠΌΠΊΠΎΡΡ‚ΡŒ
  • Комиссия

НапримСр, A, B ΠΈ C ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ (A->B, B->C), ΠΏΡ€ΠΈ этом Π½Π΅ сущСствуСт ΠΎΠ½Ρ‡Π΅ΠΈΠ½ ΠΊΠ°Π½Π°Π»Π° A->C, Π½ΠΎ A ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» Π΄ΠΎ C, попросив B ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ ΠΊΠ°Π½Π°Π» Π·Π° нСбольшоС Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ A->B->C.

Глядя Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос - Π° Ρ‡Ρ‚ΠΎ, Ссли B Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Ρƒ A ΠΈ Π½Π΅ пСрСдаст ΠΈΡ… C? ΠžΡ‚Π²Π΅Ρ‚: B Π½Π΅ смоТСт это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ благодаря эллиптичСской ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΈ Π³ΠΈΠ±ΠΊΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Ρƒ TON.

Когда A просит B ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π», ΠΎΠ½ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ дСньги сразу, Π° лишь ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ B ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ссли C прСдоставит ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ получСния ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΎΡ‚ A, Ρ‚ΠΎ B ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Ρ‚ C Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΡƒΡŽ сумму. Π—Π°Ρ‚Π΅ΠΌ B ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρƒ A Ρ‚Ρƒ ΠΆΠ΅ сумму + комиссию, ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΎΡ‚ C. И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅, Ссли Π΅Π΅ Π΄Π»ΠΈΠ½Π° большС 3.

КаТдоС Π·Π²Π΅Π½ΠΎ Ρ†Π΅ΠΏΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, начиная ΠΎΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€Π° ΠΈ заканчивая Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ назначСния. Условия ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ договорСнностСй ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ΄Π°ΠΌΠΈ, Π½ΠΎ ΠΊΠ»ΡŽΡ‡ всСгда остаСтся Π΅Π΄ΠΈΠ½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ позволяСт Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» всСм участникам, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅. Условия каскадны ΠΎΡ‚ отправитСля ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. НапримСр, Ссли Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΈΠ· 4 звСньСв 2 Π±Π΅Ρ€ΡƒΡ‚ комиссию Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ 0.01 TON, Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ 0.02 TON комиссии, ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π²Π΅Π½ΠΎ пСрСдаст дальшС. ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ°Π½Π°Π»Π° всСгда ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΡ‚ отправитСля ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΠΌΠ°Π½ Π½ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» Π² послСдний ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΎΠ΄Π° Π½Π΅ успСла Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ свою Ρ‡Π°ΡΡ‚ΡŒ с ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ сосСдом.

Π’ случаС, Ссли ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΎΠ΄ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ Π½Π΅ согласится ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ, ΠΊΠ°Π½Π°Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Ρ‡Π΅Π½ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π½Π°Π·Π°Π΄, ΠΈ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ ΠΊΠ°Π½Π°Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π° для отправитСля. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΈ Π½Π΅ согласится ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π°. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π° послС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠ°Π½Π°Π»Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ.

Π“Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ бСзопасности

Π’Π΅ΡΡŒ процСсс происходит Π±Π΅Π· взаимодСйствия с Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠΌ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, комиссия сСти Π½Π΅ платится. К Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ с Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠΌ приходится ΠΏΡ€ΠΈΠ±Π΅Π³Π½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС разногласий, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли сосСд ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π²Π΅Π΄Π΅Ρ‚ сСбя Π½Π΅ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, отказываСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π² ΠΎΠ±ΠΌΠ΅Π½ Π½Π° Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ просто ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π² ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, Π·Π°ΠΊΡ€Ρ‹Π² Π΅Π³ΠΎ, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свои дСньги - всС застраховано.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ условных ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ, условия ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… описаны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ:

int cond(slice input, int fee, int capacity, int deadline, int key) {
    slice sign = input~load_bits(512);
    throw_unless(24, check_data_signature(input, sign, key));
    throw_unless(25, deadline >= now());

    int amount = input~load_coins();
    throw_unless(26, amount <= capacity);

    return amount + fee;
}

Π›ΠΎΠ³ΠΈΠΊΠ° условных ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ выполняСтся ΠΎΡ„Ρ„Ρ‡Π΅ΠΈΠ½ Π² случаС согласованности сторон, Π° Π² случаС разногласий - ΠΎΠ½Ρ‡Π΅ΠΈΠ½.

ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΠΎΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°

ВсС звСнья Ρ†Π΅ΠΏΠΈ извСстны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ звСнья Ρ†Π΅ΠΏΠΈ Π·Π½Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠ°Π½Π°Π» с Π½ΠΈΠΌΠΈ, ΠΈ Ρ‚Π΅Ρ…, с ΠΊΠ΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΈΠΌ. ΠŸΡ€ΠΈ этом Π½Π΅ получится Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, являСтся Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Π·Π²Π΅Π½ΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ.

Π­Ρ‚ΠΎ достигаСтся Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π² 'Garlic' Π²ΠΈΠ΄Π΅, Π³Π΄Π΅ задания ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ‹ ΠΈ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹ shared ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌ, ΠΊΠΎΠΌΡƒ это Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ. Π’ Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ заданиям ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ для массовки.

Π—Π°Π΄Π°Π½ΠΈΠ΅ состоит ΠΈΠ· описания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ΄Π° ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ сосСда, ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ. БосСди Π½Π΅ смогут ΠΎΠ±ΠΌΠ°Π½ΡƒΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ значСния описаны Π² Π·Π°Π΄Π°Π½ΠΈΠΈ, ΠΈ ΠΊΠ°Π½Π°Π» просто отклонится ΠΏΡ€ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ.

ВзаимодСйствия ΠΏΠΎ сСти Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅

Π‘Π΅Ρ‚Π΅Π²ΠΎΠ΅ взаимодСйствиС строится Π½Π° Π΄Π²ΡƒΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… дСйствиях - ProposeAction ΠΈ RequestAction.

  • Propose - ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ подписанного ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ стСйта ΠΊΠ°Π½Π°Π»Π° с описаниСм ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ измСнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π». БосСд ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ. Π’ случаС ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΠ½ обязан ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ свой ΠΎΡ‚ΠΊΠ°Π· подписью. КаТдоС дСйствиС Propose Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΎΠ±ΠΎΠΈΡ… сторонах. Π’ случаС сСтСвых ошибок дСйствиС повторяСтся, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈΠ±ΠΎ принято, Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Π½ΠΎ с подписью. ВсС дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ строго ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠ°Π½Π°Π»Π°.

  • Request - Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ сосСднюю Π½ΠΎΠ΄Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Propose, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π».

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, ΠΏΡ€ΠΈ всСй слоТности - ΠΎΡ‡Π΅Π½ΡŒ быстроС. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° дСйствия Π½Π° сторонС Π½ΠΎΠ΄Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 3 миллисСкунды Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. А это Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ сСрвСр Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ > 300 Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² сСкунду, Π±Π΅Π· особого Ρ‚Ρ€ΡƒΠ΄Π°. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сильно ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ Π² дальнСйшСм, ΠΏΡ€ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

ВсС Π²Π°ΠΆΠ½Ρ‹Π΅ дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, запись Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ происходит Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ дСйствиями, ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π½Π° диск (ACID). ВСкущая рСализация Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… построСна ΠΏΠΎΠ²Π΅Ρ€Ρ… встроСнной LevelDB.

РСализация Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π½Π° чистом Golang, ΠΈ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирован ΠΏΠΎΠ΄ всС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ΄ΠΎΠΉ

ΠŸΡ€ΠΈ запускС указываСтся Ρ„Π»Π°Π³ -name {seed}, Π³Π΄Π΅ {seed} это любоС слово ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сгСнСрируСтся ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ кошСлСк, адрСс кошСлька вывСдСтся Π² консоль, ΠΈ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ тСстовыми ΠΌΠΎΠ½Π΅Ρ‚Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄ дальнСйшими дСйствиями.

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½ΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСрвиса ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄:

  • list - ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ список Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠ½Ρ‡Π΅ΠΈΠ½ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ².
  • deploy - Π—Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΊΠ°Π½Π°Π» с Π½ΠΎΠ΄ΠΎΠΉ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ ΠΊΠ»ΡŽΡ‡ (слСд ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ) ΠΈ балансом.
  • open - ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» с Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π΄Π°Π»Π΅Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ ΠΎΠ½Ρ‡Π΅ΠΈΠ½ ΠΊΠ°Π½Π°Π» ΠΊΠ°ΠΊ Ρ‚ΡƒΠ½Π΅Π»ΡŒ. Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ для Π²ΠΈΡ€Ρ‚ ΠΊΠ°Π½Π°Π»Π°.
  • send - ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ°ΠΌΠΎΠ·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ, послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π». ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ open.
  • sign - ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈ сумму, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ стСйт Π² hex Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ другая сторона ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для закрытия Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°.
  • close - Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π», Π½Π° Π²Ρ…ΠΎΠ΄ просит стСйт ΠΎΡ‚ sign. Π—Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ.
  • destroy - Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠ½Ρ‡Π΅ΠΈΠ½ ΠΊΠ°Π½Π°Π» с ΡƒΠΊΠ°Π·Π°Π½Ρ‹ΠΌ Π΄Π°Π»Π΅Π΅ адрСсом, сначала пытаСмся ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ, Ссли Π½Π΅ получаСтся, ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π’Π°ΠΊΠΆΠ΅ имССтся развСрнутая Π½ΠΎΠ΄Π° с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Π΅Π΅ ΠΊΠ»ΡŽΡ‡ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ - fdf66ea12228f2dab720d3f4deffc82d8a10eef7400ff604aa5d4e7e80758370

HTTP API

Нодой ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ, Ρ‡Π΅Ρ€Π΅Π· API, Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ описаниС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

GET /api/v1/channel/onchain

Query parameter address must be set to channel address.

Response example:

{
  "id": "3e4c462d14277d25e89b063e4df4e000",
  "address": "EQAxZGOOZAXU5XhCAp8bbGG5xQZfGhc6ppHrdIXJrla6Ji8i",
  "accepting_actions": true,
  "status": "active",
  "we_left": true,
  "our": {
    "key": "fdf66ea12228f2dab720d3f4deffc82d8a10eef7400ff604aa5d4e7e80758370",
    "available_balance": "0",
    "onchain": {
      "committed_seqno": 0,
      "wallet_address": "EQARsvGCV5t-iXkOA97DwksSv_nKC5obhYnysnc3V4YZW8el",
      "deposited": "0.1"
    }
  },
  "their": {
    "key": "3e4c462d14277d25e89b063e4df4e0476d4f5729c11da0ea716d7003cc6ba26c",
    "available_balance": "0",
    "onchain": {
      "committed_seqno": 0,
      "wallet_address": "EQCVgVWnMWAXsjrWci0kUTUVaHI7Lxa7lqMIHyGSTTOxqXUm",
      "deposited": "0"
    }
  },
  "init_at": "2024-02-04T14:39:00Z",
  "updated_at": "2024-02-04T14:39:00Z",
  "created_at": "2024-02-04T14:39:10.094014354Z"
}

GET /api/v1/channel/onchain/list

Returns all onchain channels, supports filtering with query parameters status (active | closing | inactive | any) and key (hex neighbour node key)

Response example:

[
  {
    "id": "3e4c462d14277d25e89b063e4df4e000",
    "address": "EQAxZGOOZAXU5XhCAp8bbGG5xQZfGhc6ppHrdIXJrla6Ji8i",
    "accepting_actions": true,
    "status": "active",
    "we_left": true,
    "our": {
      "key": "fdf66ea12228f2dab720d3f4deffc82d8a10eef7400ff604aa5d4e7e80758370",
      "available_balance": "0",
      "onchain": {
        "committed_seqno": 0,
        "wallet_address": "EQARsvGCV5t-iXkOA97DwksSv_nKC5obhYnysnc3V4YZW8el",
        "deposited": "0.1"
      }
    },
    "their": {
      "key": "3e4c462d14277d25e89b063e4df4e0476d4f5729c11da0ea716d7003cc6ba26c",
      "available_balance": "0",
      "onchain": {
        "committed_seqno": 0,
        "wallet_address": "EQCVgVWnMWAXsjrWci0kUTUVaHI7Lxa7lqMIHyGSTTOxqXUm",
        "deposited": "0"
      }
    },
    "init_at": "2024-02-04T14:39:00Z",
    "updated_at": "2024-02-04T14:39:00Z",
    "created_at": "2024-02-04T14:39:10.094014354Z"
  },
  {
    "id": "fdf66ea12228f2dab720d3f4deffc800",
    "address": "EQCEFA5lzhJbJGIWoSokRoJFeEMisCON-qlvVUgZjwyGDoxR",
    "accepting_actions": true,
    "status": "active",
    "we_left": false,
    "our": {
      "key": "fdf66ea12228f2dab720d3f4deffc82d8a10eef7400ff604aa5d4e7e80758370",
      "available_balance": "0.1",
      "onchain": {
        "committed_seqno": 0,
        "wallet_address": "EQARsvGCV5t-iXkOA97DwksSv_nKC5obhYnysnc3V4YZW8el",
        "deposited": "0"
      }
    },
    "their": {
      "key": "3e4c462d14277d25e89b063e4df4e0476d4f5729c11da0ea716d7003cc6ba26c",
      "available_balance": "0.1",
      "onchain": {
        "committed_seqno": 0,
        "wallet_address": "EQCVgVWnMWAXsjrWci0kUTUVaHI7Lxa7lqMIHyGSTTOxqXUm",
        "deposited": "0.2"
      }
    },
    "init_at": "2024-02-04T14:23:59Z",
    "updated_at": "2024-02-06T12:38:20Z",
    "created_at": "2024-02-04T14:24:09.3526702Z"
  }
]

POST /api/v1/channel/onchain/open

Connects to neighbour node by its key and deploys onchain channel contract with it.

Requires body parameters: with_node - hex neighbour node key, capacity - amount of ton to add to initial balance.

Request:

{
  "with_node": "3e4c462d14277d25e89b063e4df4e0476d4f5729c11da0ea716d7003cc6ba26c",
  "capacity": "5.52"
}

Response example:

{
  "address": "EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqB2N"
}

address - is onchain channel contract address

POST /api/v1/channel/onchain/close

Closes onchain channel with neighbour node.

Requires body parameters: address - channel contract address.

Optional parameters: force - boolean, indicates a style of channel closure, if true, do it uncooperatively (onchain). If false or not specified, tries to do it cooperatively first.

Request:

{
  "address": "EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqB2N",
  "force": false
}

Response example:

{
  "success": true
}

POST /api/v1/channel/virtual/open

Opens virtual channel using specified chain and parameters.

Requires body parameters: ttl_seconds - virtual channel life duration, capacity - max transferable amount. nodes_chain - list of nodes with parameters to build chain.

Node parameters: deadline_gap_seconds - seconds to increase channel lifetime for safety reasons, can be got from node parameters, same as fee which will be paid to proxy node for the service after channel close. key - node key.

Last node is considered as final destination.

Request:

{
  "ttl_seconds": 86400,
  "capacity": "3.711",
  "nodes_chain": [
    {
      "key": "3e4c462d14277d25e89b063e4df4e0476d4f5729c11da0ea716d7003cc6ba26c",
      "fee": "0.005",
      "deadline_gap_seconds": 1800
    },
    {
      "key": "1e4c462d14277d25e89b063e4df4e0472d4f5729c11da0ea716d7003cc6ba11f",
      "fee": "0",
      "deadline_gap_seconds": 1800
    }
  ]
}

Response example:

{
  "public_key": "af9ad86e9201d7c2b930f6a2707475bfa84faf3633729ec7139c0592d2823d6b",
  "private_key_seed": "095822d7dc66312d59dd54311d665f26748229bd3a67c80391baef6745e39cf8",
  "status": "pending",
  "deadline": "2024-02-07T07:55:43+00:00"
}

POST /api/v1/channel/virtual/transfer

Transfer by auto-closing virtual channel using specified chain and parameters.

Requires body parameters: ttl_seconds - virtual channel life duration, amount - transfer amount. nodes_chain - list of nodes with parameters to build chain.

Node parameters: deadline_gap_seconds - seconds to increase channel lifetime for safety reasons, can be got from node parameters, same as fee which will be paid to proxy node for the service after channel close. key - node key.

Last node is considered as final destination.

Request:

{
  "ttl_seconds": 3600,
  "amount": "2.05",
  "nodes_chain": [
    {
      "key": "3e4c462d14277d25e89b063e4df4e0476d4f5729c11da0ea716d7003cc6ba26c",
      "fee": "0.005",
      "deadline_gap_seconds": 300
    },
    {
      "key": "1e4c462d14277d25e89b063e4df4e0472d4f5729c11da0ea716d7003cc6ba11f",
      "fee": "0",
      "deadline_gap_seconds": 300
    }
  ]
}

Response example:

{
  "status": "pending",
  "deadline": "2024-02-07T07:55:43+00:00"
}

POST /api/v1/channel/virtual/close

Close virtual channel using specified state.

Requires body parameters: key - virtual channel public key, state - signed hex state to close channel with.

Request:

{
  "key": "af9ad86e9201d7c2b930f6a2707475bfa84faf3633729ec7139c0592d2823d6b",
  "state": "f509a550365e4fbb75479b076cf6144d52b20fd97d21d9f9d3873df3fe9615918628129551a29480498744c3b412e590446a632db92204d0e48dadc177624ae2cb123cd6659eceaec432f77d6b2820ca1b6e7006b95163c9942e680b9afed0650bdb2f5513f9219eaad4809209106f02ccff31eb66be9ee8b0c03f78a90dee90623ceb9e2eda39e916ecbb8015771d0d13f615c6d279f26e1f3af56544f283e3",
}

Response example:

{
  "success": true
}

POST /api/v1/channel/virtual/state

Save virtual channel state to not lose it.

Requires body parameters: key - virtual channel public key, state - signed hex state to save.

Request:

{
  "key": "af9ad86e9201d7c2b930f6a2707475bfa84faf3633729ec7139c0592d2823d6b",
  "state": "f509a550365e4fbb75479b076cf6144d52b20fd97d21d9f9d3873df3fe9615918628129551a29480498744c3b412e590446a632db92204d0e48dadc177624ae2cb123cd6659eceaec432f77d6b2820ca1b6e7006b95163c9942e680b9afed0650bdb2f5513f9219eaad4809209106f02ccff31eb66be9ee8b0c03f78a90dee90623ceb9e2eda39e916ecbb8015771d0d13f615c6d279f26e1f3af56544f283e3",
}

Response example:

{
  "success": true
}

GET /api/v1/channel/virtual/list

Returns all virtual channels of onchain channel specified with address query parameter.

Response example:

{
  "their": [
    {
      "key": "1e8bd2e8a72fd005d9c7b1b144d5d2634906c681dacee4475ef9798118142b30",
      "status": "active",
      "amount": "0",
      "outgoing": null,
      "incoming": {
        "channel_address": "EQC0K4-WwDACT8XxWO4A5zYMi5W9np9CdbPd34OxO33Bq73L",
        "capacity": "0.2",
        "fee": "0",
        "deadline_at": "2024-02-07T13:35:49Z"
      },
      "created_at": "2024-02-07T12:06:11.177563296Z",
      "updated_at": "2024-02-07T12:06:11.177563426Z"
    }
  ],
  "our": null
}

GET /api/v1/channel/virtual

Returns virtual channel specified with key (virtual channel's public key) query parameter.

Response example:

{
  "key": "1e8bd2e8a72fd005d9c7b1b144d5d2634906c681dacee4475ef9798118142b30",
  "status": "active",
  "amount": "0",
  "outgoing": null,
  "incoming": {
    "channel_address": "EQC0K4-WwDACT8XxWO4A5zYMi5W9np9CdbPd34OxO33Bq73L",
    "capacity": "0.2",
    "fee": "0",
    "deadline_at": "2024-02-07T13:35:49Z"
  },
  "created_at": "2024-02-07T12:06:11.177563296Z",
  "updated_at": "2024-02-07T12:06:11.177563426Z"
}

Roadmap

  • ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° с ΠΊΠ΅ΠΌ-Ρ‚ΠΎ Π±Π΅Π· кошСлька Π² сСти (для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π΅ΠΌΡƒ ΠΊΠΎΠΈΠ½ΠΎΠ² Π΄ΠΎ дСплоя ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°)
  • Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ Π² Π²ΠΈΠ΄Π΅ MerkleProof для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ практичСски Π±Π΅Π·Π»ΠΈΠΌΠΈΡ‚Π½ΠΎΠ³ΠΎ количСства Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² Π½Π° ΠΎΠ½Ρ‡Π΅ΠΈΠ½ ΠΊΠ°Π½Π°Π».
  • ОбновлСниС состояний Ρ‡Π΅Ρ€Π΅Π· MerkleUpdate.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Postgres Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ….
  • API ΠΈ Webhook события

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages