WavesKit - Waves ๋ธ”๋ก์ฒด์ธ ์ž‘์—…์„ ์œ„ํ•œ PHP ํ”„๋ ˆ์ž„์›Œํฌ

๋‚˜๋Š” ์ข‹๋‹ค. PHP ๊ฐœ๋ฐœ ์†๋„์™€ ๋›ฐ์–ด๋‚œ ์ด์‹์„ฑ์„ ์œ„ํ•ด. ์ฃผ๋จธ๋‹ˆ์— ํ•ญ์ƒ ๋„๊ตฌ๊ฐ€ ์žˆ๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์œผ๋ฉด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

๊ตญ๋‚ด ๋ธ”๋ก์ฒด์ธ์„ ์ ‘ํ•  ๋•Œ ์ƒ๋‹นํžˆ ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ํŒŒ๋„ ํ”Œ๋žซํผ ๊ทธ์˜ ๋ฌด๊ธฐ๊ณ ์—๋Š” ๊ธฐ์„ฑํ’ˆ PHP SDK๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์จ์•ผ๋งŒ ํ–ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์–ด์š” ๋…ธ๋“œ ๊ฑฐ๋ž˜์— ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„ธ ๊ฐœ์˜ ์ฃผ์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์„ธ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค... ์ผ๋ถ€ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ ์•ˆํƒ€๊นŒ์šด ๊ด‘๊ฒฝ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์€ ๋ง‰๋‹ค๋ฅธ ๊ณจ๋ชฉ์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ง์ด์ฃ . ์ฒซ์งธ, ์ œํ•œ๋œ ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด API, ๋‘˜์งธ, ์†๋„ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋‹น์‹œ์—๋Š” ๋…ธ๋“œ๊ฐ€ ๋งค์šฐ ๋Š๋ ธ์Šต๋‹ˆ๋‹ค).

๋‘ ๊ฐœ์˜ ๋ณ‘๋ ฌ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋น ๋ฅด๊ณ  ๋…ธ๋“œ API์™€ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ๋ธ”๋ก์ฒด์ธ ํƒ์ƒ‰๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋Š” Waves Platform ์ž‘์—…์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ•œ๊ณณ์— ๋ชจ์œผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค w8io ะธ WavesKit.

Waves ๋ธ”๋ก์ฒด์ธ์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. w8io ๋ธŒ๋ผ์šฐ์ €. ์‰ฝ์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๋ชจ๋“  ์ž”์•ก์— ๋Œ€ํ•œ ๋…๋ฆฝ์ ์ธ ๊ณ„์‚ฐ์„ ์ž‘์„ฑํ•˜๊ณ  ์›๋ž˜ ๋…ธ๋“œ์˜ ๊ณ„์‚ฐ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๋ฒ„๊ทธ ํ˜„์ƒ๊ธˆ ํ”„๋กœ๊ทธ๋žจ ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์—๊ฒŒ ํšจ๊ณผ์ ์ด๋ฉฐ ๋ฐœ๊ฒฌ๋œ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ๋น„์šฉ์„ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค). ์ด ํ•ญ๋ชฉ์—์„œ w8io ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

w8io๋ฅผ ์ž‘์—…ํ•˜๋ฉด์„œ ๋‚˜๋Š” ์ด๋ฏธ ์˜๊ตฌ์‹ฌ์„ ํ’ˆ์—ˆ์ง€๋งŒ, ์ž‘์—…์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋๋‚˜๊ณ  SDK๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ๋‚˜์˜ ์˜๊ตฌ์‹ฌ์€ ํ™•์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ธ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์–ด๋””์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ธฐ์ดˆ๋ฅผ ์œ„ํ•œ ๋ฒฝ๋Œ์„ ์ง์ ‘ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ทธ๋“ค์ด ํƒœ์–ด๋‚œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค: ABC์ฝ”๋“œ base58๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ ค๋ฉด(์‹ค์ œ๋กœ๋Š” ์–ด๋–ค ์•ŒํŒŒ๋ฒณ์ด๋ผ๋„ ์ธ์ฝ”๋”ฉํ•ด์•ผ ํ•จ), ์ปค๋ธŒ 25519 ํ˜ธํ™˜๋˜๋Š” ์„œ๋ช…์„ ์ƒ์„ฑํ•˜๊ณ  ํ™•์ธํ•˜๋ ค๋ฉด(์˜ต์…˜ ํฌํ•จ) ์Šคํ…Œ๋กœ์ด๋“œ์—), ๋ธ”๋ ˆ์ดํฌ 2b ํ•ด์‹œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค(PHP 7.2๋ถ€ํ„ฐ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ).

๊ฐ์‚ฌํ•ด์•ผ ํ•  ๊ณณ์€ ๋ฐ”๋กœ ์—ฌ๊ธฐ๋‹ค ์ด๋‚˜๋ผ ์นด๋ฅด๋‹ค๋…ธ๋ฐ” ๋‚˜์—๊ฒŒ ๋ฐฉํ–ฅ์„ ์•Œ๋ ค์ค€ ๊ท€์ค‘ํ•œ ์กฐ์–ธ์— ๋Œ€ํ•ด ์ž‘๊ณก๊ฐ€ ๋‚˜์—๊ฒŒ ์ต์ˆ™ํ•˜์ง€๋งŒ ์˜ค๋ž˜๋œ ํฌํ•จ ํŒŒ์ผ ๋Œ€์‹ .

๋ช‡ ๋‹ฌ ํ›„์— WavesKit์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค., ๋‚˜์™”๋‹ค ๋ฒ ํƒ€ ๋ฒ„์ „ ์ด์ œ Waves ํ”Œ๋žซํผ์˜ ๋ชจ๋“  ํ‘œ์ค€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฉ”์ธ ๋„คํŠธ์›Œํฌ PHP 64๋ถ€ํ„ฐ ๋ชจ๋“  5.6๋น„ํŠธ ๋ฒ„์ „์—์„œ ์‹คํ–‰๋˜๋Š” ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑ, ์„œ๋ช… ๋ฐ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WavesKit์„ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

composer require deemru/waveskit

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ:

use deemruWavesKit;
$wk = new WavesKit( 'T' );
$wk->setSeed( 'manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add' );
$tx = $wk->txBroadcast( $wk->txSign( $wk->txTransfer( 'test', 1 ) ) );
$tx = $wk->ensure( $tx );

์œ„์˜ ์˜ˆ์—์„œ๋Š” "T" ํ…Œ์ŠคํŠธ๋„ท์—์„œ ์‹คํ–‰๋˜๋Š” WavesKit ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ‚ค์™€ ๊ณ„์ • ์ฃผ์†Œ๊ฐ€ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐ๋˜๋Š” ์‹œ๋“œ ๋ฌธ๊ตฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ, ์‹œ๋“œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐ๋œ ์ฃผ์†Œ์—์„œ ๋ณ„์นญ ์ฃผ์†Œ "test"๋กœ ์ „์†ก ํŠธ๋žœ์žญ์…˜ 0.00000001 Waves๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๊ฐœ์ธ ํ‚ค๋กœ ์„œ๋ช…๋˜๋„๋ก ์ „์†กํ•œ ํ›„ ๋„คํŠธ์›Œํฌ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ ํ›„, ์šฐ๋ฆฌ๋Š” ๊ฑฐ๋ž˜๊ฐ€ ๋„คํŠธ์›Œํฌ์— ์˜ํ•ด ์„ฑ๊ณต์ ์œผ๋กœ ํ™•์ธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ๋ž˜ ์ž‘์—…์ด ์ง‘์ค‘๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. tx๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜. ํŠธ๋žœ์žญ์…˜ ์ž‘์—…์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ์ดํ•ด๋ฅผ ์œ„ํ•ด ๋‹ค์Œ์„ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WavesKit ๋ฌธ์„œ ๋˜๋Š” ์ฆ‰์‹œ ์˜ˆ์‹œ์ ์ธ ์˜ˆ๋กœ ์ „ํ™˜ํ•˜์‹ญ์‹œ์˜ค. ์ง€์†์ ์ธ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ.

WavesKit์€ ์‹ค์ œ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ‚ฌ๋Ÿฌ ๊ธฐ๋Šฅ์€ ๊ธฐ๋Šฅ์„ ๋ณด์žฅํ•˜๋‹ค, ์ด๋Š” ๊ฑฐ๋ž˜๊ฐ€ ์†์‹ค๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฐ˜๋Œ€๋กœ ํ™•์ธ๋˜์–ด ๋„คํŠธ์›Œํฌ์—์„œ ํ•„์š”ํ•œ ํ™•์ธ ์ˆ˜์— ๋„๋‹ฌํ–ˆ๋‹ค๋Š” ํ•„์š”ํ•œ ์‹ ๋ขฐ๋„ ์ˆ˜์ค€์˜ ๋‹ฌ์„ฑ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฐฉํƒ„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ WavesKit์ด ๋…ธ๋“œ์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์˜จ์‹ค ์กฐ๊ฑด์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ธฐ๋ณธ ๋…ธ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•˜์—ฌ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€๋งŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฑ์—… ๋…ธ๋“œ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—… ๋…ธ๋“œ ๋ฐฐ์—ด์„ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. setBestNode ํ˜„์žฌ ๋†’์ด์™€ ์‘๋‹ต ์†๋„์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์žฅ ์ข‹์€ ๋…ธ๋“œ๋ฅผ ์ฃผ ๋…ธ๋“œ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์—ฌ๊ธฐ์— ๋‚ด๋ถ€ ์ฟผ๋ฆฌ ์บ์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์‚ฌ์šฉ์ž์™€ ๋…ธ๋“œ ์†Œ์œ ์ž ๋ชจ๋‘์— ๋Œ€ํ•œ ๋ฐฐ๋ ค๋ฅผ ๋Š๋‚„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ๊ณ ๊ธ‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. tx๋ชจ๋‹ˆํ„ฐ. ๋“ค์–ด์˜ค๋Š” ๊ฑฐ๋ž˜์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‘๋‹ตํ•ด์•ผ ํ•  ํ•„์š”์„ฑ ๋•Œ๋ฌธ์— ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๋ธ”๋ก์ฒด์ธ์˜ ๊ฑฐ๋ž˜ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๋ฅผ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๊ณ ํ†ต์„ ๊ฒช์ง€ ๋งˆ์„ธ์š”. ์›ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” ๋ฒ ํฌ๋กœ ์ด ๊ธฐ๋Šฅ์„ ์ค‘์‹ฌ์œผ๋กœ ์™„์ „ํžˆ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฏ€๋กœ ์ง์ ‘ ์ž‘๋™ ๋ฐฉ์‹์„ ์‰ฝ๊ฒŒ ์—ฐ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ์—์„œ.

์ €๋Š” ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ธ๋ฅ˜์˜ ๊ฐ€์žฅ ํฐ ์—…์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์œ ์ผํ•œ ๊ฐœ๋ฐœ์ž์ด๊ณ  ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์ด ํ•ด๊ฒฐ๋œ ์ƒํƒœ์— ๋„๋‹ฌํ–ˆ์œผ๋ฏ€๋กœ WavesKit.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€