Avatar
Pruk S.
08f968569f15f1f803466845f954e8b384fee6669aa589c85b860fd3ffe59a09
Bitcoiner, Researcher, Beer lover and Coffee addict
Replying to Avatar siamstr.com

> บทความชุดนี้ผมคิดว่าจะเขียนแยกเป็นตอน ๆ ตามบทเรียนที่ได้รับจาก Bitcoin FOSS Program ของทาง Chaincode Labs โดยจะมาแชร์การแก้โจทย์ปัญหาตามบททดสอบในแต่ละสัปดาห์

สัปดาห์แรกนี้ผมได้โจยท์มาทั้งหมด 8 ข้อ และการตอบปัญหาทั้งหมดจะใช้ Bash Script เขียนคำสั่งร่วมกับ `bitcoin-cli` ในการทำความเข้าใจพื้นฐานของ Bitcoin-Core ระบบการบันทึกบัญชีลง Blockchain การดู/ตรวจสอบ ข้อมูลบน Block รวมถึงพื้นฐานข้อมูลภายใน Block จนถึง Transaction เบื้ิองต้น และในบทความนี้จะควบคุมความรู้ในหนังสือนั้นในบทที่ 1-3 ของหนังสือ Mastering Bitcoin หากท่านต้องการศึกษาเพิ่มเติมให้เข้าใจมากขึ้น แนะนำให้อ่านไปด้วย

### ข้อที่ 1: แฮชของบล็อคที่ 654,321 คืออะไร?

ข้อนี้ง่ายมาก ๆ โดยเราจะใช้โปรแกรม `bitcoin-cli` จาก bitcoin-core ที่ติดตั้งไว้แล้ว เชื่อมไปยัง RPC server ที่เป็น Full-node ของเรา พร้อมกับคำสั่ง `getblockhash` เราสามารถดูได้ว่ามันใช้งานยังไงด้วยการพิมพ์ `help` นำหน้าคำสั่ง เราก็จะได้คำอธิบายพร้อมกับตัวอย่างการใช่งานมา

```sh

$ bitcoin-cli help getblockhash

getblockhash height

Returns hash of block in best-block-chain at height provided.

Arguments:

1. height (numeric, required) The height index

Result:

"hex" (string) The block hash

Examples:

> bitcoin-cli getblockhash 1000

> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockhash", "params": [1000]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/

```

ในโจทย์นี้เราจะใช้เพียงคำสั่งเดียวเท่านั้น มาดูกัน

```sh

$ bitcoin-cli getblockhash 654321

000000000000000000058452bbe379ad4364fe8fda68c45e299979b492858095

```

ผมได้เรียกใช้ `bitcoin-cli` พร้อมกับคำสั่ง `getblockhash 654321`

และได้คำตอบมาว่า `000000000000000000058452bbe379ad4364fe8fda68c45e299979b492858095` นั้นคือแฮชของบล็อคที่ 654,321 นั่นเอง ข้อมูลเหล่านี้เราจะได้ใช้มันในข้อหลัง ๆ ไปข้อต่อไปกัน

### ข้อที่ 2: จงพิสูจน์ข้อความนี้ว่าถูกเซนต์โดยที่อยู่นี้ถูกต้องหรือไม่

```

(true / false) Verify the signature by this address over this message:

address: `1E9YwDtYf9R29ekNAfbV7MvB4LNv7v3fGa`

message: `1E9YwDtYf9R29ekNAfbV7MvB4LNv7v3fGa`

signature: `HCsBcgB+Wcm8kOGMH8IpNeg0H4gjCrlqwDf/GlSXphZGBYxm0QkKEPhh9DTJRp2IDNUhVr0FhP9qCqo2W0recNM=`

```

ตามโจทย์นี้อาจจะดูงง ๆ ผมจึงไปค้นใน [Docs](https://developer.bitcoin.org/reference/rpc/index.html) ของ Bitcoin-Core ดูและพบกับคำสั่ง `verifymessage` มาลองดูกัน

```sh

$ bitcoin-cli help verifymessage

verifymessage "address" "signature" "message"

Verify a signed message.

Arguments:

1. address (string, required) The bitcoin address to use for the signature.

2. signature (string, required) The signature provided by the signer in base 64 encoding (see signmessage).

3. message (string, required) The message that was signed.

Result:

true|false (boolean) If the signature is verified or not.

Examples:

Unlock the wallet for 30 seconds

> bitcoin-cli walletpassphrase "mypassphrase" 30

Create the signature

> bitcoin-cli signmessage "1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX" "my message"

Verify the signature

> bitcoin-cli verifymessage "1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX" "signature" "my message"

As a JSON-RPC call

> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "verifymessage", "params": ["1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX", "signature", "my message"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/

```

สังเกตุว่าคำสั่งนี้ใช้ 3 ตัวแปรตามที่โจทย์ให้มาเป๊ะ ๆ มาลองใช้ดูกัน

```sh

address="1E9YwDtYf9R29ekNAfbV7MvB4LNv7v3fGa"

message="1E9YwDtYf9R29ekNAfbV7MvB4LNv7v3fGa"

signature="HCsBcgB+Wcm8kOGMH8IpNeg0H4gjCrlqwDf/GlSXphZGBYxm0QkKEPhh9DTJRp2IDNUhVr0FhP9qCqo2W0recNM="

```

เริ่มจากการประกาศตัวแปรไว้ตามฉบับสายผู้ใช้ Linux แล้วก็ลองส่งคำสั่งกันเลย

```sh

$ bitcoin-cli verifymessage $address $signature $message

false

```

`false` ... ตอนแรกก็ยังงง ๆ แต่ข้อนี้คำตอบคือ false จริง ๆ นั่นแหละ อาจจะเพราะคนทำโจทย์ลืมดูว่า message มันซ้ำกับ address อยู่ หรือไม่ก็จงใจ ช่างมัน ไปข้อต่อไปกัน

### ข้อที่ 3: บล็อคที่ 123,456 มีจำนวน outputs Transaction ทั้งหมดเท่าไหร่?

ข้อนี้จะไปไวหน่อยเพราะว่าเราไม่จำเป็นต้อง loop เพื่อดูข้อมูล Transaction ในบล็อคเพื่อนับเอา outputs เราสามารถใช้คำสั่ง `getblockstats` ได้เลย แล้วใช่ `jq` แปลงข้อมูลให้เป็น JSON เพื่อให้เราอ่านได้ง่ายขึ้น

```sh

$ bitcoin-cli getblockstats 123456 | jq .

{

"avgfee": 416666,

"avgfeerate": 1261,

"avgtxsize": 330,

"blockhash": "0000000000002917ed80650c6174aac8dfc46f5fe36480aaef682ff6cd83c3ca",

"feerate_percentiles": [

0,

0,

0,

3861,

3891

],

"height": 123456,

"ins": 17,

"maxfee": 1000000,

"maxfeerate": 3891,

"maxtxsize": 618,

"medianfee": 0,

"mediantime": 1305197900,

"mediantxsize": 258,

"minfee": 0,

"minfeerate": 0,

"mintxsize": 257,

"outs": 24,

"subsidy": 5000000000,

"swtotal_size": 0,

"swtotal_weight": 0,

"swtxs": 0,

"time": 1305200806,

"total_out": 16550889992,

"total_size": 3964,

"total_weight": 15856,

"totalfee": 5000000,

"txs": 13,

"utxo_increase": 7,

"utxo_increase_actual": 7,

"utxo_size_inc": 567,

"utxo_size_inc_actual": 567

}

```

นี่คือข้อมูลเบื้องต้นของบล็อค 123,456 ที่มีรายการ transaction อยู่ 13 รายการ และมี outputs รวม 24 รายการ เราสามารถใช้ `jq` แสดงผลเฉพาะข้อมูลที่เราต้องการได้ง่าย ๆ โดยพิมพ์ชื่อข้อมูลที่เราต้องการตามไปหลังจุด `.` ข้อนี้สามารถตอบได้เลย

```sh

$ bitcoin-cli getblockstats 123456 | jq .outs

24

```

### ข้อที่ 4: จงหา taproot address ลำดับที่ 100 โดยคำนวนจาก xpub ต่อไปนี้

ตัว extended public key หรือ xpub ที่ผมได้มาคือ `xpub6Cx5tvq6nACSLJdra1A6WjqTo1SgeUZRFqsX5ysEtVBMwhCCRa4kfgFqaT2o1kwL3esB1PsYr3CUdfRZYfLHJunNWUABKftK2NjHUtzDms2` เอาหล่ะ แล้วจะทำยังไงต่อหล่ะเนี่ย

แล้วผมก็ไปเจอกับคำสั่งนี้ในที่สุด `deriveaddresses` ว่าแต่มันใช้ยังไงหว่า

```sh

$ bitcoin-cli help deriveaddresses

deriveaddresses "descriptor" ( range )

Derives one or more addresses corresponding to an output descriptor.

Examples of output descriptors are:

pkh() P2PKH outputs for the given pubkey

wpkh() Native segwit P2PKH outputs for the given pubkey

sh(multi(,,,...)) P2SH-multisig outputs for the given threshold and pubkeys

raw() Outputs whose scriptPubKey equals the specified hex scripts

tr(,multi_a(,,,...)) P2TR-multisig outputs for the given threshold and pubkeys

In the above, either refers to a fixed public key in hexadecimal notation, or to an xpub/xprv optionally followed by one

or more path elements separated by "/", where "h" represents a hardened child key.

For more information on output descriptors, see the documentation in the doc/descriptors.md file.

Arguments:

1. descriptor (string, required) The descriptor.

2. range (numeric or array, optional) If a ranged descriptor is used, this specifies the end or the range (in [begin,end] notation) to derive.

Result:

[ (json array)

"str", (string) the derived addresses

...

]

Examples:

First three native segwit receive addresses

> bitcoin-cli deriveaddresses "wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#cjjspncu" "[0,2]"

> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "deriveaddresses", "params": ["wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#cjjspncu", "[0,2]"]}' -H 'content-type: text/plain;' http://127.0.0.1:8332/

```

อื้อหือ ยิ่งงงไปอิ๊กก เอาวะลองดูตามตัวอย่างของ P2TR ละกัน

```sh

$ bitcoin-cli deriveaddresses "tr(xpub6Cx5tvq6nACSLJdra1A6WjqTo1SgeUZRFqsX5ysEtVBMwhCCRa4kfgFqaT2o1kwL3esB1PsYr3CUdfRZYfLHJunNWUABKftK2NjHUtzDms2)"

error code: -5

error message:

Missing checksum

```

อะ...อ้าว ย้อนกลับไปดูตัวอย่าง และอ่าน Docs ดี ๆ จะพบว่าการ deriveaddresses นั้นจะมีรูปแบบอยู่ เช่น

`wpkh([d34db33f/84h/0h/0h]xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY/0/*)#cjjspncu`

1. wpkh() นั้นคือรูปแบบของการเข้ารหัส ซึ่งมีหลายอย่างให้ใช้ตามวัตถุประสงค์ อย่าง multisig ก็จะเป็นอีกแบบ

2. [d34db33f/84h/0h/0h] ส่วนนี้ึคือ fingerprint จาก pubkey หลักก่อนจะคำนวน xpub ซึ่งโจทย์ข้อนี้ไม่มีให้ และหลังจากศึกษามาก็พบว่ามันไม่จำเป็นสำหรับการสร้าง address แบบ basic ง่าย ๆ

3. xpub6DJ2dNUysrn5Vt36jH2KLBT2i1auw1tTSSomg8PhqNiUtx8QX2SvC9nrHu81fT41fvDUnhMjEzQgXnQjKEu3oaqMSzhSrHMxyyoEAmUHQbY ส่วนนี้คืิอ extended public key ซึ่งคำนวนมาจาก pubkey หลักที่คำนวนมาจาก private key หรือ seed ของเราอีกที

4. /0/_ คือ path สำหรับระยะการคำนวน address โดยให้มองเป็น /เริ่มต้น/สิ้นสุด เช่น /0/99 หมายถึง เราจะคำนวน address จากตำแหน่งที่ 0 ถึงตำแหน่ง 99 ถ้าใช้ _ คือจะคำนวนกี่ที่อยู่ก็ได้

5. #cjjspncu คือ checksum ของ descriptor กระเป๋านี้ และสามารถใช้คำสั่ง `getdescriptorinfo` เพื่อดูข้อมูลได้

เอาหล่ะ มาลองกันใหม่ โดยที่ผมจะ derive ตำแหน่งที่ /100 ที่อยู่เดียวเท่านั้น

```sh

$ bitcoin-cli getdescriptorinfo "tr(xpub6Cx5tvq6nACSLJdra1A6WjqTo1SgeUZRFqsX5ysEtVBMwhCCRa4kfgFqaT2o1kwL3esB1PsYr3CUdfRZYfLHJunNWUABKftK2NjHUtzDms2/100)"

{

"checksum": "5p2mg7zx",

"descriptor": "tr(xpub6Cx5tvq6nACSLJdra1A6WjqTo1SgeUZRFqsX5ysEtVBMwhCCRa4kfgFqaT2o1kwL3esB1PsYr3CUdfRZYfLHJunNWUABKftK2NjHUtzDms2/100)#5p2mg7zx",

"hasprivatekeys": false,

"isrange": false,

"issolvable": true

}

```

ได้แฮะ ลองเอา checksum ที่ได้ไปคำนวนที่อยู่กัน

```sh

$ bitcoin-cli deriveaddresses "tr(xpub6Cx5tvq6nACSLJdra1A6WjqTo1SgeUZRFqsX5ysEtVBMwhCCRa4kfgFqaT2o1kwL3esB1PsYr3CUdfRZYfLHJunNWUABKftK2NjHUtzDms2/100)#5p2mg7zx"

[

"bc1p3yrtpvv6czx63h2sxwmeep8q98h94w4288fc4cvrkqephalydfgszgacf9"

]

```

หลังจากนั้นผมก็ใช้ `jq -r .[0]` เพื่อดึงข้อมูลออกจาก JSON array แล้วส่งคำตอบ ผ่านได้ด้วยดี

### ข้อที่ 5 สร้าง P2SH multisig address ด้วย public keys 4 ชุดจาก inputs ใน transaction นี้

`37d966a263350fe747f1c606b159987545844a493dd38d84b070027a895c4517`

ไหนดูซิ transaction นี้เป็นยังไง

```sh

$ bitcoin-cli getrawtransaction "37d966a263350fe747f1c606b159987545844a493dd38d84b070027a895c4517" 1

{

"blockhash": "000000000000000000024a848a9451143278f60e4c3e73003da60c7b0ef74b62",

"blocktime": 1701158269,

"confirmations": 7751,

"hash": "e28a0885b6f413e24a89e9c2bac74d4c6f335e17545f0b860da9146caf7ffe39",

"hex": "02000000000104b5f641e80e9065f09b12f3e373072518885d1bd1ddd9298e5b9840de515edac90000000000feffffffd54f8986afbb6ff18572acaee58fa3ad64446dd770ffe9b6a04f798becdafb440000

000000feffffff475e3062b1c3ee87544c29d723866da2b65a1b1a42e6ea4a4fd48d79f83c26c50000000000feffffffa56387352ecc93dfd37648e6ebd4d9effb37ffefcad02eb7b85860c9097cf8090000000000feff

ffff02fa440f00000000001600148070ec3954ecdcbfc210d0117e8d28a19eb8467270947d0000000000160014b5fe46c647353ec9c06374655502094095f0289c0247304402200dd758801b40393f68dad8ab57558803

efcd2b681ee31eb44fb3cfa9666d2bf90220254d34fa4990e23652bf669053c5e16fd2fbb816bed2eeb44c1f1e6e54143e3e012102bbb4ba3f39b5f3258f0014d5e4eab5a6990009e3e1dba6e8eaff10b3832394f70247

304402201694761a5749b6a84f71459c04a44cf9d34a36ae8c9044c3af7a3a5514ef2e64022058f61feb92d6d54b71fdea47e7dfcd20f6a5c12e2fbcb15bc44fe95c73f2e808012103aaf17b1a7b4108f7e5bc4f7d59c2

0f7fb1a72dbc74a9a3d6d1f8488df159c76002473044022014b65c60f65e62d9dac893e404c8de2a007c7c6b74dbac18e454d8374e159759022012453f69112adadf9495fd3fe288aa5ed9e3d836340da06fa1e82c8e09

adef57012103a6d919c76d9117c23570a767450013edf31cf6be7d3b5a881c06a9aa1f2c24ce0247304402203d3b02390803c1d673fa49bd64d4a26fbeb29e3fc152af8f844d776c9409e41302206903a011a04e00a7f4

ec606da4320226d2d393f565702cc58cfcef6dca67f84c01210383d12258e3e294a6d7754336f6b4baef992ec4b91694d3460bcb022b11da8cd2817e0c00",

"locktime": 818817,

"size": 666,

"time": 1701158269,

"txid": "37d966a263350fe747f1c606b159987545844a493dd38d84b070027a895c4517",

"version": 2,

"vin": [

{

"scriptSig": {

"asm": "",

"hex": ""

},

"sequence": 4294967294,

"txid": "c9da5e51de40985b8e29d9ddd11b5d8818250773e3f3129bf065900ee841f6b5",

"txinwitness": [

"304402200dd758801b40393f68dad8ab57558803efcd2b681ee31eb44fb3cfa9666d2bf90220254d34fa4990e23652bf669053c5e16fd2fbb816bed2eeb44c1f1e6e54143e3e01",

"02bbb4ba3f39b5f3258f0014d5e4eab5a6990009e3e1dba6e8eaff10b3832394f7"

],

"vout": 0

},

{

"scriptSig": {

"asm": "",

"hex": ""

},

"sequence": 4294967294,

"txid": "44fbdaec8b794fa0b6e9ff70d76d4464ada38fe5aeac7285f16fbbaf86894fd5",

"txinwitness": [

"304402201694761a5749b6a84f71459c04a44cf9d34a36ae8c9044c3af7a3a5514ef2e64022058f61feb92d6d54b71fdea47e7dfcd20f6a5c12e2fbcb15bc44fe95c73f2e80801",

"03aaf17b1a7b4108f7e5bc4f7d59c20f7fb1a72dbc74a9a3d6d1f8488df159c760"

],

"vout": 0

},

{

"scriptSig": {

"asm": "",

"hex": ""

},

"sequence": 4294967294,

"txid": "c5263cf8798dd44f4aeae6421a1b5ab6a26d8623d7294c5487eec3b162305e47",

"txinwitness": [

"3044022014b65c60f65e62d9dac893e404c8de2a007c7c6b74dbac18e454d8374e159759022012453f69112adadf9495fd3fe288aa5ed9e3d836340da06fa1e82c8e09adef5701",

"03a6d919c76d9117c23570a767450013edf31cf6be7d3b5a881c06a9aa1f2c24ce"

],

"vout": 0

},

{

"scriptSig": {

"asm": "",

"hex": ""

},

"sequence": 4294967294,

"txid": "09f87c09c96058b8b72ed0caefff37fbefd9d4ebe64876d3df93cc2e358763a5",

"txinwitness": [

"304402203d3b02390803c1d673fa49bd64d4a26fbeb29e3fc152af8f844d776c9409e41302206903a011a04e00a7f4ec606da4320226d2d393f565702cc58cfcef6dca67f84c01",

"0383d12258e3e294a6d7754336f6b4baef992ec4b91694d3460bcb022b11da8cd2"

],

"vout": 0

}

],

"vout": [

{

"n": 0,

"scriptPubKey": {

"address": "bc1qspcwcw25anwtlsss6qgharfg5x0ts3njad8uve",

"asm": "0 8070ec3954ecdcbfc210d0117e8d28a19eb84672",

"desc": "addr(bc1qspcwcw25anwtlsss6qgharfg5x0ts3njad8uve)#pzjnvw8p",

"hex": "00148070ec3954ecdcbfc210d0117e8d28a19eb84672",

"type": "witness_v0_keyhash"

},

"value": 0.01000698

},

{

"n": 1,

"scriptPubKey": {

"address": "bc1qkhlyd3j8x5lvnsrrw3j42qsfgz2lq2yu3cs5lr",

"asm": "0 b5fe46c647353ec9c06374655502094095f0289c",

"desc": "addr(bc1qkhlyd3j8x5lvnsrrw3j42qsfgz2lq2yu3cs5lr)#hzcalwww",

"hex": "0014b5fe46c647353ec9c06374655502094095f0289c",

"type": "witness_v0_keyhash"

},

"value": 0.0823

}

],

"vsize": 344,

"weight": 1374

}

```

เราจำเป็นต้องเรียนรู้เรื่อง Witness program ของ bip-141 เพื่อเข้าใจ scriptPubKey หรือ redeemScript เบื่องต้นเสียก่อน

โดยพื้นฐานธุรกรรมแบบ P2WPKH ภายใน txinwitness จะมี signature และ public keys ตามลำดับ เราจะลองใช้ pubkey นี้ในการสร้างกระเป๋า multisig กัน

```sh

txinfo=$(bitcoin-cli getrawtransaction "37d966a263350fe747f1c606b159987545844a493dd38d84b070027a895c4517" 1)

ad1=$(echo $txinfo | jq '.vin[0] | .txinwitness[1]')

ad2=$(echo $txinfo | jq '.vin[1] | .txinwitness[1]')

ad3=$(echo $txinfo | jq '.vin[2] | .txinwitness[1]')

ad4=$(echo $txinfo | jq '.vin[3] | .txinwitness[1]')

bitcoin-cli createmultisig 1 ["$ad1","$ad2","$ad3","$ad4"] | jq -r '.address'

```

> 3GyWg1CCD3RDpbwCbuk9TTRQptkRfczDz8

ง่ายเลยข้อนี้ ไปข้อต่อไปกัน

### ข้อที่ 6: transaction ไหนในบล็อค 257,343 ใช้เงินรางวัลจากการขุดจากบล็อค 256,128?

`Which tx in block 257,343 spends the coinbase output of block 256,128?`

ข้อนี้ต้องไปหาว่า coinbase output ก็คือเงินรางวัลจากการขุดบล็อคนั้น ๆ รวมกับค่า fee นั่นเอง ซึ่งจะอยู่ในลำดับแรกของบล็อคนั้น ๆ เสมอ เรามาเขียนน Bash Script หา coinbase txid กัน

```sh

blockhash=$(bitcoin-cli getblockhash 256128)

tx256=$(bitcoin-cli getblock $blockhash 2)

```

ด้วยคำสั่ง `getblock ตามด้วยแฮชของบล็อค และระดับข้อมูล` โดยที่ระดับ

1. จะแสดงข้อมูลบล็อค ไม่มี transaction

2. จะแสดงข้อมูล transaction แต่ไม่รวม inputs

3. จะแสดงข้อมูลทั้งหมดของบล็อคนั้น ๆ

```sh

coinbase_txid=$(echo $tx256 | jq -r '.tx[0].txid')

echo $coinbase_txid

```

แล้วก็เลือก txid จากข้อมูลแรกมา ซึ่งก็คือ coinbase output ของเรา

> 611c5a0972d28e421a2308cb2a2adb8f369bb003b96eb04a3ec781bf295b74bc

> นี่คือ txid ที่เราจะเอาไปหาว่ามันมีใน inputs ไหนของ transaction ไหนใน block 257,343

> ซึ่งโดยทั่วไปแล้วหากเรา loop หากทีละ transaction คงเสียเวลาน่าดู เราลองมาใช้ฟังชั่น select() ของ `jq` กัน

```sh

blockhash=$(bitcoin-cli getblockhash 256128)

tx256=$(bitcoin-cli getblock $blockhash 2)

coinbase_txid=$(echo $tx256 | jq -r '.tx[0].txid')

blockhash=$(bitcoin-cli getblockhash 257343)

tx257=$(bitcoin-cli getblock $blockhash 3)

# เลือกข้อมูล transaction

block257tx=$(echo $tx257 | jq -r '.tx')

# ใน .tx นั้นเราจะได้ JSON array ที่มีรายการ transaction เยอะมาก ๆ เราจะเลือกอันเดียวที่มี coinbase txid ใน vin หรือ inputs นั้น ๆ กัน และใช้ jq อีกครั้งเพื่อให้แสดงผลแค่ txid

echo "$block257tx" | jq ".[] | select(.vin[].txid==\"$coinbase_txid\")" | jq -r '.txid'

```

และนี่คือคำตอบของข้อนี้

> c54714cb1373c2e3725261fe201f267280e21350bdf2df505da8483a6a4805fc

### ข้อที่ 7: มี UTXO อันนึงที่ไม่เคยถูกใช้งานเลยในบล็อคที่ 123,321 UTXO นั้นคือ address อะไร?

`Only one single output remains unspent from block 123,321. What address was it sent to?`

ข้อนี้เราจะใช้คำสั่ง gettxout ที่จะ return ข้อมูลของ UTXO ที่ไม่เคยถูกใช้งานให้เรา โดยการ loop ไปทีละ transaction

```sh

blockhash=$(bitcoin-cli getblockhash 123321)

blockinfo=$(bitcoin-cli getblock $blockhash 3)

transaction=$(echo $blockinfo | jq '.tx[]')

txid=$(echo $transaction | jq -r '.txid')

for item in $txid; do

bitcoin-cli gettxout "$item" 0 | jq -r '.scriptPubKey.address'

done

```

> 1FPDNNmgwEnKuF7GQzSqUcVQdzSRhz4pgX

> ได้มาแล้วคำตอบของเรา โจทย์ข้อนี้คงผิดแน่ ๆ หากมี UTXO ที่ยังไม่ได้ใช้งานมากกว่า 1 อันเพราะเราสั่งให้แสดงมันทุก transaction เลย! ฮาาา

### ข้อที่ 8: public key อะไรที่ใช้เซ็นอันดับแรกใน transaction e5969add849689854ac7f28e45628b89f7454b83e9699e551ce14b6f90c86163

ข้อนี้ค่อนข้างหินเลย ตอนแรกเอาไปเปิดในดูใน mempool พบว่าเป็นธุรกรรมที่ถูก force close lightning channel ซึ่งมันต้องเป็น multisig แน่ ๆ

เอาหล่ะ ดูข้อมูลธุรกรรมนี้ก่อนแล้วกัน

```sh

bitcoin-cli getrawtransaction "e5969add849689854ac7f28e45628b89f7454b83e9699e551ce14b6f90c86163" 1

{

"blockhash": "0000000000000000000b0e5eec04d784347ef564b3ddb939eca019a66c9cedbe",

"blocktime": 1610254919,

"confirmations": 161208,

"hash": "881d7ab9ad60d6658283dbbad345f6f28491a264cd11d060b4fb4f121851a7f3",

"hex": "020000000001018b1aab3917e6595816c63bf9dd0ebf4303f2b2a23103aee1500282c944affd71000000000000000000010e26000000000000160014c47082b5a49065d85ab65730e8c28bb0b4810b960347

3044022050b45d29a3f2cf098ad0514dff940c78046c377a7e925ded074ad927363dc2dd02207c8a8ca7d099483cf3b50b00366ad2e2771805d6be900097c2c57bc58b4f34a50101014d6321025d524ac7ec6501d018d3

22334f142c7c11aa24b9cffec03161eca35a1e32a71f67029000b2752102ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc268ac00000000",

"locktime": 0,

"size": 237,

"time": 1610254919,

"txid": "e5969add849689854ac7f28e45628b89f7454b83e9699e551ce14b6f90c86163",

"version": 2,

"vin": [

{

"scriptSig": {

"asm": "",

"hex": ""

},

"sequence": 0,

"txid": "71fdaf44c9820250e1ae0331a2b2f20343bf0eddf93bc6165859e61739ab1a8b",

"txinwitness": [

"3044022050b45d29a3f2cf098ad0514dff940c78046c377a7e925ded074ad927363dc2dd02207c8a8ca7d099483cf3b50b00366ad2e2771805d6be900097c2c57bc58b4f34a501",

"01",

"6321025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f67029000b2752102ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc268ac"

],

"vout": 0

}

],

"vout": [

{

"n": 0,

"scriptPubKey": {

"address": "bc1qc3cg9ddyjpjask4k2ucw3s5tkz6gzzukzmg49s",

"asm": "0 c47082b5a49065d85ab65730e8c28bb0b4810b96",

"desc": "addr(bc1qc3cg9ddyjpjask4k2ucw3s5tkz6gzzukzmg49s)#c68e8rrv",

"hex": "0014c47082b5a49065d85ab65730e8c28bb0b4810b96",

"type": "witness_v0_keyhash"

},

"value": 9.742e-05

}

],

"vsize": 121,

"weight": 483

}

```

เรารู้แล้วว่าข้อมูลจะอยู่ใน `txinwitness` ซึ่งอันดับแรก ๆ เป็น signature และอันหลังเป็น public key แต่ว่า มันมีหลาย public key ใช่มะ ในนี้

```sh

transaction=$(bitcoin-cli getrawtransaction "e5969add849689854ac7f28e45628b89f7454b83e9699e551ce14b6f90c86163" 1)

scriptpubkey=$(echo $txinfo | jq -r .vin[].txinwitness[2])

echo $scriptpubkey

```

> 6321025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f67029000b2752102ad92d02b7061f520ebb60e932f9743a43fee1db87d2feb1398bf037b3f119fc268ac

> เอาหล่ะ เรามาแกะข้อมูลนี้กัน หากเราไปอ่าน bip-143 จะมีรูปแบบตัวอย่างลำดับอยู่ และก็พบว่ามันคืออักษรลำดับที่ 5 ถึง 67 เราต้องใช้ Bash slicing string เพื่อตัดให้เหลือส่วนที่เราต้องการและส่งข้อสอบดู

```sh

echo ${scriptpubkey:4:66}

```

> 025d524ac7ec6501d018d322334f142c7c11aa24b9cffec03161eca35a1e32a71f

![done!]()

โหวว สุดยอดเลยครับ

Replying to Avatar Jakk Goodday

🔥 Javier Milei บิ่น บ้า ท้านรก! หรือแค่เพียงตัวละครปาหี่? | นำเสนอคำแปลนรกโดย nostr:npub1mqcwu7muxz3kfvfyfdme47a579t8x0lm3jrjx5yxuf4sknnpe43q7rnz85 แด่ชาว #siamstr

nostr:naddr1qqxnzdesx5mr2vp5xq6r2wf3qgsdsv8w0d7rpgmykyjykau6lw60z4nn8laceper2zrwy6ctfesu6csrqsqqqa28am3zar

อ่านที่ Habla | https://habla.news/u/jakk@rightshift.to/1705650404591

อ่านที่ Yakihonne | https://w3.do/_bAXakYt

note นี้จะพาไปส่อง.. การตัดสินใจของ Javier Milei ที่พึ่งไปพูดบนเวที World Economic Forum (WEF) ใน Davos ซึ่งทำให้เกิดความสงสัยและการตั้งคำถามตามมามากมาย โดยเฉพาะอย่างยิ่งในกลุ่มคนที่ยึดมั่นในหลักการของเสรีทุนนิยมและบิตคอยน์

WEF มักถูกมองว่าเป็นแหล่งรวมของพวก Elite ต่ำช้า (ชนชั้นนำระดับโลก) ซึ่งดูเหมือนจะขัดแย้งกับอุดมคติของตัว Milei เอง

ทำไมชายผู้นี้… ซึ่งดูเหมือนจะเป็นผู้สนับสนุนแนวคิดที่ตรงกันข้ามกับการควบคุมแบบรวมศูนย์บ้าๆ นั่น (พวก WEF) จึงก้าวเข้าไปในสิ่งที่หลายคนต่างก็มองว่าเป็น… "ถ้ำของสิงโต" ??

เพื่อคลี่คลายปริศนาขัดใจแม่นี้..

เราต้องมาทำความเข้าใจกับแก่นแท้ของ Anarcho-Capitalism กันเสียก่อน มันเป็นปรัชญาที่ให้การยกย่องกับเสรีภาพอย่างแท้จริง รวมไปถึงตลาดเสรี และสังคมไร้รัฐ

ผู้ที่ยึดมั่นในแนวคิดนี้ล้วนมองว่ารัฐนับเป็นความชั่วร้ายที่ไม่มีความจำเป็นต้องมีอยู่ พวกเขาต่างศรัทธาในพลังของตลาดที่ไร้การควบคุม และการทำธุรกรรมต่างๆ กันโดยสมัครใจ

ด้วยลักษณะที่ไร้ศูนย์กลางของบิตคอยน์ มันไร้พรมแดน และไม่ขึ้นกับรัฐบาลใด มันจึงมักถูกยกย่องว่าเป็นเครื่องมือทางการเงินที่แสดงถึงหลักการเหล่านี้ (An-cap)

ในวันนี้ Milei ในฐานะประธานาธิบดีคนปัจจุบันของอาร์เจนตินา ผู้สนับสนุนแนวคิดแห่งการมีอิสรภาพอย่างแข็งขัน ได้ก้าวเข้าสู่ WEF เวทีที่ใครหลายคนต่างก็มองว่าเป็นจุดตรงกันข้ามของความเชื่อของเขา

การเคลื่อนไหวครั้งนี้.. ดูเผินๆ เหมือนเป็นความย้อนแย้งในตัวเองของ Milei แต่ทว่า.. มันอาจจะมีเจตนารมย์บางอย่างที่ซ่อนอยู่เบื้องหลังความบ้าบิ่นนี้หรือไม่?

นี่จะเป็นการเดินหมาก เป็นโอกาสที่จะท้าทายสถานะเดิมๆ ใช่หรือเปล่า? หรือแค่ 'เล่นละครตามบท' ที่ตัวเองไม่ได้เขียนขึ้น?

ในโลกที่กำลังแบ่งฝักแบ่งฝ่ายรุนแรงขึ้นเรื่อยๆ "อำนาจของการพูดคุย" ยิ่งกลายเป็นสิ่งสำคัญอันยิ่งยวด

การที่ Milei โผล่ไปที่ WEF แบบนี้.. มันอาจไม่ใช่การสยบยอมต่อพวกนั้นหรอกกระมัง.. แต่มันอาจเป็นโอกาสที่จะได้ไป "หว่านเมล็ดพันธุ์แห่งเสรีภาพ" ในผืนดินอันแห้งผากของพวกพญาแร้งก็เป็นได้

อย่ากระนั้นเลย.. ผมอยากชวนให้พวกเราลองตรึกตรองกันดีๆ ดูเสียก่อน

การคุยกับคนต่างความคิดเนี่ย.. มันไม่ใช่การทรยศต่ออุดมการณ์ของตัวเองหรืออะไรทำนองนั้นเสมอไปหรอกนะ มันคือความกล้าหาญที่จะออกไปตอกหน้า ไปยืนบนเวทีเพื่อชักจูง หรือไปให้ความรู้กับ 'ปลาที่อาจหิวโหย' ต่างหากล่ะ.. (คุณก็เคยเห็นผู้ชายเสียงนุ่มไปยืนบนเวทีของงานคริปโตอยู่บ่อยๆ)

ยิ่งไปกว่านั้น.. การอยู่ร่วมบนเวที WEF ของ Milei เราอาจมองได้ว่า นี่เหมือนเขากำลังเล่น "เกมหมากรุกระดับโลก" กับใครบางคนหรือบางกลุ่ม ..เขาเดินย่างสามขุมเข้าไปในสนามที่มีศัตรูคุมเกม เขาได้กลายเป็นสะพานเชื่อมระหว่างโลกคนละขั้ว

เสียงของเขา ธงเสรีภาพของเขา ดังก้องกังวานในหอประชุมแบบที่ไม่มีใครเคยได้ยินมันมาก่อน.. นี่คือโอกาสท้าทายมุมมองเดิมๆ เสนอวิสัยทัศน์ใหม่เรื่องอิสรภาพ เศรษฐกิจ และการปกครอง

ในหมู่ผู้คนชาวบิตคอยน์ พวกอนาธิปไตยหัวอิสระ การกระทำแบบนี้อาจจะดูชวนชัง สร้างความงงงวย แต่สิ่งสำคัญเราควรมองว่านี่.. คือ "การแทรกซึมในเชิงกลยุทธ์" เอาความคิดเสรีภาพออกไปสู่เวทีโลกที่ไม่เคยมีมานานแล้ว

มันคือการเดินข้ามเส้นไปฝั่งโน้น..

ไม่ใช่เพื่อไปยอมแพ้ แต่ไปเพื่อการส่งเสียง..

เพื่อ... เปลี่ยนความคิดของพวกมันซะ!

ทำไมผมจึงมองโลกในแง่ดีได้มากขนาดนี้?

ก็เพราะผมได้ฟังเนื้อหาสุนทรพจน์ของ Milei มาแล้วน่ะสิ.. (จนผมรู้สึกคันปากอยากจะบอกพวกเราต่ออยู่นี่ไง)

การบุกเข้ารัง WEF ของ Milei เนี่ย.. มันช่วยเตือนสติพวกเราว่า.. การเปลี่ยนแปลงน่ะ.. มักต้องก้าวขาออกจากคอมฟอร์ตโซนให้ได้เสียก่อน ออกไปคุยกับคนที่เห็นต่าง.. ไปแหกปากตะโกนความเชื่อในที่ๆ มันจะส่งผลสะเทือนเลื่อนลั่นได้แรงๆ จริงๆ ซะ

มันบ้าบิ่นนะ..

แต่เฮ้ย! ถ้าโชคดีแล้วล่ะก็.. มันอาจปูทางให้ผู้คนได้เข้าใจ.. ได้เห็นถึงคุณค่าของเสรีภาพแบบอนาธิปไตย ในวงการที่ถูกปิดหูปิดตามาซะนานแล้วก็ได้!

อย่างน้อยๆ คนฟังก็คงจะตาสว่างกันขึ้นมาบ้างล่ะนะ..

แต่เหรียญไม่ได้ด้านเดียว.. เวทีก็ไม่ได้มีแค่เพียงด้านหน้า ในขณะที่เรามองเห็นการแสดง มันก็แปลว่าเราไม่เห็นหลังเวที

เหตุผลอะไรที่ทำให้พวกอีลีทยอมปล่อยให้ประธานาธิบดีชาวร็อค ขึ้นมาร้องแรกแหกกระเชอ พูดจาชวนขมคอบนเวทีของตัวเอง?

ตกลงว่านี่คือเกมของใครกันแน่?

ทั้งหมดนี้เป็นการแสดงที่ผ่านการสมรู้ร่วมคิดมาอย่างดีแล้ว เพื่อจุดระเบิดดึงความสนใจจากบรรดาเมนสตรีม เพื่อสานต่อความสัมพันธ์อย่างเลวๆ กันในอนาคต หรือก็แค่เราจะคิดมากกันไปเอง?

WEF อยากจะปรับภาพลักษณ์เพื่อจะกลายเป็นพ่อพระผู้กว้างเปิดกว้างในเวทีระดับโลกอย่างนั้นหรือ? หรือพวกเขาไม่ได้มอง Milei เป็นเสือร้ายตัวความหวังอย่างที่พวกเราคิด?

มันป่วยกาลที่ผมจะพยายามคาดการณ์หรือวิเคราะห์สิ่งที่ยังไม่สามารถจะหาคำตอบได้ในตอนนี้.. มันอาจจะถูกหรือผิดก็ได้หากผมรีบทำนายทายทักอะไรออกไป แต่มันไม่ผิดที่ผมจะตั้งคำถามและวางบางอย่างไว้เป็นข้อสังเกตุ

เอาเป็นว่า เราควรที่จะ Don't trust, verify กันต่อไป

ลองไปอ่านคำกล่าวสุนทรพจน์ของ Milei ที่ผมได้แปลเอาไว้ จากนั้นก็แค่ติดตามดูผลลัพธ์และหารกระทำของคนเหล่านี้กันต่อไป

เพราะเสียงของการกระทำนั้น มันมักจะดังกว่าคำพูดของคนเสมอ..

https://m.youtube.com/watch?v=Pfcd0gWNIog

#SiamstrOG #Jakk #Milei

#m=image%2Fjpeg&dim=466x461&blurhash=%7CAByjp9s%7ESRX-%3AoKR%25acbe9sIWE2ITRjxbV%40WYV%3Fn0R%3AtAR%7DxaR%2BtRj%5Enzka%24%7E%24vo%25aeM%7BNas7XBIqjbE1ahWYods.jbkBxljKNhs6t6X9soR%3As%25o%25%25KV%3Ft8NGoMRPRijdIvRiM%5EWFjJt5k9t6ogxnxbWZoaofWVf8WEjq&x=80b34bbd9b042615bc5312bff6b112e9264bbebf5ba9a77350ccfff14abda1ab

ผมก็ยังสงสัยว่าการที่ Milei ขึ้นมาพูดบนเวที WEF แบบนี้ได้ จริง ๆ แล้ว agenda ของพวกเค้าคืออะไร

ชอบแนวคิดครับ มันเหมือนกับการ Don't trust but verify เลย คือเราจะไม่ trust ที่ตัวศาสนา แต่จะ verify ที่หลักธรรมแล้วเอาสิ่งที่เรา verified แล้วมาใช้กับการดำเนินชีวิตของเราเอง

GM ครับ โรแมนติกสุด ๆ

Replying to Avatar Khing_T21

-------

แค่เดา

-------

.

ถ้า story ที่จุดตลาดกระทิงรอบที่แล้วคือ De-Fi

story ที่จะจุดตลาดกระทิงรอบถัดไปคือ Bitcoin layer2 (แต่ไม่ใช่ layer2 แบบที่บิตคอยเนอร์เข้าใจ)

.

ผมกำลังพูดถึงของอย่าง Rootstock, Stack และ Ordinal (ยี้!)

.

สาเหตุเพราะ

.

1. มนุษยชาติ(ที่เป็นชิตคอยเนอร์) ได้รีดเค้นความคิดสร้างสรรค์และความเป็นไปได้แทบทุกอย่างเกี่ยวกับ EVM ออกมาหมดแล้ว ตั้งแต่ DEX, GameFi, NFT, DAO, etc. โอกาสที่จะมี use case แบบใหม่ๆ เกิดขึ้นจากเทคโนโลยีนี้เป็นไปได้ยากมากๆ และการพัฒนาใดๆ ที่เห็นอยู่ในตอนนี้ก็ไม่มีอะไรนอกเหนือไปจากการพัฒนาประสิทธิภาพ เช่น ทำให้เร็วกว่าเดิม ถูกกว่าเดิม เป็นแค่การทำเรื่องเดิมๆ ได้ดีขึ้น ไม่ได้สร้างอะไรใหม่ๆ แล้ว (จะมีอะไรใหม่ๆ ได้ก็คงจะหลังจากมี technology breakthrough ครั้งใหม่ ซึ่งตอนนี้ยังไม่เห็น)

.

2. ผมเห็นด้วยกับตี้(เมื่อไหร่แกจะมาเล่น nostr?) ว่าวงการ De-Fi เป็นตลาดแบบ winner takes all นั่นคือถ้าหากว่า De-Fi มีประโยชน์กับมนุษยชาติและมีคนใช้จริงๆ ก็จะเหลือผู้เล่นใหญ่(ไม่อยากใช้คำเรียกว่าโปรโตคอลเลย)รอดอยู่แค่ไม่กี่เจ้า ในขณะที่ตัวเล็กตัวน้อยอื่นๆ ล้มหายตายจากไป Dev ที่สร้างของพวกนั้นไม่สามารถแย่งส่วนแบ่งตลาดนั้นได้ ต้องถอยออกมาและมองหาโอกาสใหม่ๆ

.

3. บิตคอยน์เพิ่งได้รับอนุมัติให้มี Spot ETF ซึ่งเป็นหมุดหมายต่อวงการ Traditional Finance ว่าภาครัฐยอมรับบิตคอยน์แล้ว บวกกับฮาล์ฟวิ่งที่กำลังจะเกิดขึ้น จะมี angel/VC อีกมากที่รอบที่แล้วยังมองว่าแถวนี้เถื่อน ไม่เข้ามายุ่ง แต่คราวนี้เหมือนได้ไฟเขียวแล้ว เชื่อแล้วว่าบิตคอยน์ไปรอดได้ยาวๆ แน่ ก็อยากจะเข้ามาหาโอกาสด้วย แต่ว่าไม่ได้ซื้อบิตคอยน์เฉยๆ หรอกนะ

.

4. ฝนตกขี้หมูไหล คนไฉไลก็ไหลมารวมตัวกัน Dev จาก De-Fi รอบที่แล้วก็จะเข้าหา VC/angel หน้าใหม่เหล่านั้น นำเสนอโปรเจคเดิมที่เคยทำ เพิ่มเติมคือ "เราจะทำมันบนบิตคอยน์" (ซึ่งจริงๆ คือทำบน Rootstock หรือ Stack ที่อ้างว่าตัวเองเป็น Layer2 smart contract on Bitcoin) เสริมด้วย narrative ว่าเห็นที่คนเค้าใช้ๆ กันอยู่บนอีเธอเรียมนั่นมั้ย มันมีการใช้งานจริงๆ นะเว้ย เราก็จะทำเหมือนมันน่ะแหละ แต่เราจะเจ๋งกว่าเพราะเราทำบน "บล็อกเชน" ที่ใหญ่ที่สุด แกร่งที่สุด และได้รับการยอมรับจากรัฐและประชาชนมากที่สุด เพราะงั้นเราจะดึงผู้ใช้งานหน้าเก่ามาให้หมด และตกผู้ใช้งานหน้าใหม่ที่กำลังจะเข้ามาด้วย!

.

5. เงินมาผ้าหลุด พอมีทุน การตลาดก็มา แจกนั่นแจกนี่ ปั่นข่าวนั้นนี่ แอร์ดงแอร์ดรอป ท่าเดิมๆ น่ะแหละทำมันเข้าไป จะแย่งคนใช้ที่เค้าใช้ De-Fi ในเชนของรอบที่แล้วมาได้มั้ยไม่รู้ แต่ล่อตาล่อใจคนที่เข้ามาใหม่ได้แน่นอน นึกสภาพนักลงทุนรายย่อยที่เข้ามาเพราะเห็นว่าบิตคอยน์ได้รับการยอมรับแล้ว มีฮาล์ฟวิ่ง มี ETF สนใจบิตคอยน์เป็นหลักแน่ล่ะ แต่พอเข้ามาแล้วเจอ "Smart contract on Bitcoin" โอโห จะหนีไปไหนได้

.

6. ถ้าเป็นตามที่คิดไว้ โปรเจกต์และเชนพวกนั้นจะบูม บูมมากๆ ซ้ำรอยกับ De-Fi รอบก่อนด้วยจำนวนเม็ดเงินที่มากกว่า แต่หลังจากบูมแล้วจะหายไปเลยมั้ย หรือจะยังมีคนใช้จริงหลังจากนั้นคงยากที่จะตอบ

.

สรุป: บิตคอยเนอร์คนไหนรู้ตัวว่ากำลังทำอะไรอยู่ อยากสนุกอยากซิ่งไม่ว่ากัน แต่ช่วยกันดูแลคนใหม่ๆ ที่เพิ่งเข้ามาในรอบหน้านี้ด้วย อย่าให้หลงไปเจ็บหนักกับของพวกนั้นโดยเข้าใจว่ามันคือบิตคอยน์

#Siamstr

ปล. ไม่อนุญาตให้แคปไปลงเมนสตรีมมีเดีย กลัวทัวร์ลง 555

Layer 2 ที่ว่านี่ ใช่แบบที่เป็นตั๋วแลกบิตคอยน์รึเปล่า? เหอๆ

ถึงแต่งกลิ่นยังไงก็ไม่เลียนแบบของที่ตามธรรมชาติทุกอย่างครับ แล้วถ้ากาแฟดีจริงทำไมต้องแต่งกลิ่น5555

Replying to Avatar xyzy

น่าจะมี App lightning wallet แบบ Custodial Wallet ที่ใช้งานง่ายๆบนมือถือ แบบ wallet of satoshi

แต่เพิ่มฟีเจอร์คล้ายๆกับ LndHub ใน LNbits/LATES และถ้า สามารถเจน nsec , npub ได้ด้วยยิ่งดีเลย

การใช้งานประมาณว่า

nsec = LNDhub Admin URL ( LndHub ใน LNbits, รับ+ส่ง sat ได้ )

npub = LNDhub invoice URL ( LndHub ใน LNbits, รับ sat ได้เท่านั้น )

เอาง่ายๆ คือ จับเอา wallet of satoshi+LndHub+nostr ยำรวมกลายเป็น App lightning wallet อีกตัวนึ่งนั้นเอง *หรือว่ามีแล้ว*

งั้นแล้วทำไม ไม่ไปใช้งาน LNbits/LATES และใช้ LndHub extension เชื่อมต่อกับแอพ Zeus/BlueWallet

ก็ทำได้เหมือนกัน ที่ว่ามานั้น ขาดก็แต่เจน nsec , npub

ใช่มันทำได้ แต่มันไม่ได้ใช้งานง่ายขนาดนั้น สำหรับคนทั่วๆไป ถ้าต้องการใช้มันแพร่หลาย คนใช้เยอะๆมันควรเป็นแอพบนมือถือ

ที่รวมเอาทุกอย่างเข้าด้วยกัน และต้องใช้ง่ายแบบ wallet of satoshi

ผมมองในมุมผู้ใช้งานทั่วไป ที่เป็นร้านค้าเล็กๆ ที่มีพนักงาน 1-2 คน, wallet of satoshi คือตัวอย่างที่ดีใช้งานง่าย

แต่มันไม่ตอบโจทย์สำหรับร้านค้าเล็กๆ ที่มีพนักงานตั้งแต่ 1 คน ขึ้นไป

***ถ้ามีแอพแบบนี้ หรือแอพที่ใกล้เคียงแบบนี้ เพื่อนๆช่วยแนะนำผมด้วย จะได้ลองมั่งครับ

#askstr #asksiamstr #siamstr #nostr #siamstrOG #lightningwallet #Android #iOS

แล้วสมมติถ้ามี nsec/npub อยู่แล้วนี่เอามาผูกได้มั้ยครับ ไม่ต้องเจนใหม่

Replying to Avatar OrangepillmasteR

GM ครับ #siamstr เมื่อคืนต้องขอบคุณ เหล่าคุณพ่อคุณแม่ที่มาแชร์เรื่องราวและข้อมูล เกี่ยวกับ home school ให้ได้ฟังกัน ได้อะไรมาใช้เยอะเลยครับ เพื่อนผมที่เข้ามาฟัง มันเพิ่งมาเฉลยตอนเช้าว่า ทำโฮมสคูลตั้งแต่แรกเลย ถ้าครั้งต่อไปมันว่างจะชวนมันมาแลกเปลี่ยนนะครับ หลังจากพวกเราจบบทสนทนากันแล้ว มีเพื่อนๆหลายคนของผมอยากฟังย้อนหลัง ต้องขอบคุณหมอเอกที่ช่วยบันทึกเสียงไว้ครับ เมื่อคืนนั่งเพลินฟังพี่ตั๋งกับพี่เรคุยกัน เกี่ยวกับ WEF ยังอยากอยู่ฟังต่อ แต่มองดูเวลาแล้ว ต้องนอนตื่นสัก 8 โมงกว่าๆ เพื่อให้มีแรงเปิดร้าน 9 โมง เช้านี้ถือเป็นการปรับชั่วโมงการกินไปในตัวเข้าโหมด 16/8 Have a good day ครับ

GM ครับ