SLP(Simple Ledger Protocol)トークンをNode.jsから手動で焼いてみる
はじめに
念の為書いておきますが、こちらの方法でトークンを作るのに失敗したりしても、自己責任でお願いします。 テストネットで十分検証した上で、メインネットでやりましょう。
準備
mkdir slp_test cd slp_test npm init npm install slp-sdk --save
NodeのREPLでmnemonicを生成します。
$ node const BITBOXSDK = require('bitbox-sdk') const BITBOX = new BITBOXSDK() BITBOX.Mnemonic.generate(128) 'absurd unfair anchor loyal drill twin letter banana bright approve tone cube'
この12個の単語は秘密鍵みたいなものなので、絶対に他人に漏らしてはいけません。 GitHubにもコミットすべきではないでしょう。
アドレスを生成して、送金しておく
const BITBOXSDK = require('bitbox-sdk') const SLPSDK = require('slp-sdk') const SLP = new SLPSDK() const BITBOX = new BITBOXSDK() const mnemonic = 'absurd unfair anchor loyal drill twin letter banana bright approve tone cube' let seedBuffer = BITBOX.Mnemonic.toSeed(mnemonic) // 今回はtestnet用のアドレスを生成します。 // メインネットなら BITBOX.HDNode.fromSeed(seedBuffer) let hdNode = BITBOX.HDNode.fromSeed(seedBuffer, 'testnet') const wif = BITBOX.HDNode.toWIF(hdNode) const address = BITBOX.HDNode.toCashAddress(hdNode) console.log(address)
node index.js bchtest:qzghg4u00s4n2yf3emlcqaxp64n0de2mas7fg4v4qw
bitcoin.com さんに感謝しつつ、テストネット用のBCHを
Testnet BCH Faucet - Bitcoin.com Developer Platform
からいただきます。
実際に作ってみる
const BITBOXSDK = require('bitbox-sdk') const SLPSDK = require('slp-sdk') const SLP = new SLPSDK() const BITBOX = new BITBOXSDK() const mnemonic = 'absurd unfair anchor loyal drill twin letter banana bright approve tone cube' let seedBuffer = BITBOX.Mnemonic.toSeed(mnemonic) let hdNode = BITBOX.HDNode.fromSeed(seedBuffer, 'testnet') const wif = BITBOX.HDNode.toWIF(hdNode) const address = BITBOX.HDNode.toCashAddress(hdNode) console.log(address) const slp_address = SLP.Address.toSLPAddress(address) console.log(slp_address) SLP.TokenType1.create({ fundingAddress: address, // 手数料を払うアドレス fundingWif: wif, // 手数料を払うWif(Wallet import format) 秘密鍵みたいなものかな? tokenReceiverAddress: slp_address, // 作ったtokenを受け取るアドレス batonReceiverAddress: slp_address, // (たぶん)あとでもっとトークンを増やしたい(mint)ってときに追加で焼く権利を持っているアドレス bchChangeReceiverAddress: slp_address, // お釣りを受け取るアドレス decimals: 4, // 小数点以下が何桁か name: 'Shit Coin', // 名前 symbol: 'shit', // 単位 documentUri: 'http://shit.org', // トークンのドキュメントのURL documentHash: null, // トークンのドキュメントのhash initialTokenQty: 100000000000, // 最初に発行するトークンの量 }).then(tokenID => console.log).catch(err => console.log)
node index.js bchtest:qzghg4u00s4n2yf3emlcqaxp64n0de2mas7fg4v4qw slptest:qzghg4u00s4n2yf3emlcqaxp64n0de2mas9a0wkzjn 03c8dfe1f8f00270ac01bc3194bb9dbe84efc3d391f13aec22ea419bcb33d29a
最後に出力される 03c8dfe1f8f00270ac01bc3194bb9dbe84efc3d391f13aec22ea419bcb33d29a
がtoken idと呼ばれ、このトークンのgenesisトランザクションとなります。
このtoken idがトークンをユニークであると証明するためのidであり、追加で発行する(mint)する際にも必要になるようです。*1
bitcoin.comさんに感謝しつつ、テストネットのエクスクプローラーでtoken idを入力してみましょう。
Bitcoin Cash TESTNET (tBCH) Block Explorer
こちらのようにOP_RETURNに刻まれていれば成功です。
おわりに
結構簡単にトークンの発行ができたと思います。
次回はメインネットで発行して、誰かに送信するのをやってみたいと思います。
参考
SLP: Getting Started - Bitcoin.com Developer Platform
*1:実際はただのtx id何ですけどねw