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.
ΠΡΠΈΠΌΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ:
ΠΠ°ΠΆΠ΄Π°Ρ Π½ΠΎΠ΄Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ Π±Π»ΠΎΠΊΠΈ Π² ΡΠ΅ΡΠΈ ΠΈ Π²ΡΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π΅Π΅ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ² Ρ Π΅Π΅ ΠΊΠ»ΡΡΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΡΠΎ-ΡΠΎ Ρ ΠΎΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠ°Π½Π°Π», ΠΈ ΡΠΎΠ±ΡΡΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌ Π·Π°ΠΊΡΡΡΠΈΠ΅ΠΌ.
ΠΡΠ»ΠΈ Π½ΠΎΠ΄Π° Ρ ΠΎΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΡΠ·Ρ Ρ Π΄ΡΡΠ³ΠΎΠΉ Π½ΠΎΠ΄ΠΎΠΉ, ΠΎΠ½Π° Π΄Π΅ΠΏΠ»ΠΎΠΈΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π² Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½. ΠΠΎΠ½ΡΡΠ°ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 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
ΠΠΎΠ΄ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ, ΡΠ΅ΡΠ΅Π· API, Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
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"
}
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"
}
]
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
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
}
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"
}
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"
}
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
}
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
}
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
}
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"
}
- ΠΡΠΊΡΡΡΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Ρ ΠΊΠ΅ΠΌ-ΡΠΎ Π±Π΅Π· ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° Π² ΡΠ΅ΡΠΈ (Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π΅ΠΌΡ ΠΊΠΎΠΈΠ½ΠΎΠ² Π΄ΠΎ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°)
- ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ Π² Π²ΠΈΠ΄Π΅ MerkleProof Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π·Π»ΠΈΠΌΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π°ΠΊΡΠΈΠ²Π½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π½Π° ΠΎΠ½ΡΠ΅ΠΈΠ½ ΠΊΠ°Π½Π°Π».
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΡΠ΅ΡΠ΅Π· MerkleUpdate.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Postgres Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π΄Π°Π½Π½ΡΡ .
- API ΠΈ Webhook ΡΠΎΠ±ΡΡΠΈΡ