toychainではじめるsqlite メモ書き

DBは三つで構成されている。

.schemaでテーブル構成が分かる。wallet, chain, txかな。

sqlite> .schema wallet
CREATE TABLE wallet (id INTEGER, xpriv, xpub, priv, pub, address, PRIMARY KEY (id));

sqlite> .schema chain
CREATE TABLE chain (id INTEGER, tx TEXT, parent JSON, edge JSON, spent INTEGER, PRIMARY KEY (id));

sqlite> .schema tx
CREATE TABLE tx (id TEXT, tx TEXT, genesis INTEGER, sent INTEGER, PRIMARY KEY (id));

はじめtxやろ!って見てみたが、見てもよく分からず、txとブロキャス前のtxだなぁ。これだけみてどうするんだろって思ってchainみた。

id: 62
tx: toyなtx
parent: [30]
edge: {
	"address":"発行したアドレス",
	"txId":"toyなtx",
	"outputIndex":1,
	"script":"76a9149ee03f3135f0b7b9ecabab953c3087a165b7764d88ac",
	"satoshis":1192
}
spent: 0

サンプルに1行抜いてきた。spentってのはutxo的なものだろうか。まぁ勝手に処理してくれるところはあとでしればいい。toychainの欠点はGETにあり、条件検索とかで引っ張ってきにくい。なので、もはやdb直で検索した方がいいと思っている。その際、chain.edgeがそれだなと分かる。因みにこのレコードは、公式のサンプルスクリプトを叩くと生成されるレコードです。内容はただの連番記述してtoyにブロードキャストしているだけです。つまり、公式にもほぼ同じものが記載されています(笑)。

と、眺めていたんですが、これはどうもあれらしい。ブロードキャスト前のbsv.Transactionでできるtxが、txTBLにあって、chainTBLもOP_RETURN的なものは格納していない。...なるほどどうりでpowpingでtoychainを使ってない訳です。あくまでtoychainはブロードキャスト前まで処理して、任意のタイミングでpushしてねってとこまでのものらしい。なので、OP_RETURNにいれるべきデータは別で自分で持っておいた方がいいっぽい。うーん、セカンドレイヤーはこの時は意識してなかったってことになるな...推理してもしょうがないけど。

どうりでGETが弱い訳だ。アップする前に参照して使うとかそんな想定してないと...。と、いうことでsqlite toychainはあくまでBCに上げるためのDB達でaddして、アップしないならaddのデータは自前で保管しておきなさいと。これだと、DBにぶっこんどいて、お好きにmbでアップしなさいとかわらなくね?どうする?

ちなみにtxTBL

id: toyのtx|
tx: ブロキャス前のhex(tx)|
genesis: 0|
sent: 0

genesisってのが上げたか、上げてないかみたいな。結局実行して試した人しか伝わらない書き方になったな。

DBを作る
# sqlite3 project.db
テーブルを作る
> create table user(id integer primary key autoincrement, type text, type_id integer, name text, mail text, avater text);
テーブルを確認する
> .table
> .schema
sqliteを抜ける
> .exit