Avatar
Andy Joe
dd5b0fd9005f232da99f6d41e6ffb74b8c3a41f688b984dc5c9f37d0eef2f29e
bitcoin interest

ไม่มีใครแปลเหรอครับ เล่มนี้ #siamstr

กลับมานอนครับ ฟังไป จิบเบียร์ไป เมาครับ ตอนนี้ตื่นละ GM ครับ

ดีใจที่ได้เจอทุกคนตัวเป็นๆครับ ไว้มีโอกาสค่อยเจอกันใหม่นะครับ #siamstr #north101

มาเจอพี่ ต้นฮ้อคุย อีเทอร์เรี่ยม เลยเดินไปซื้อของก่อดีกว่า #siamstr #north101

Replying to Avatar Jingjo

## #Siamstr NEWS UPDATE!

อัปเดตล่าสุดจากประชุมเมื่อคืน ทั้งในส่วนของ #North101 และ #BlockMountain ครับ

#m=image%2Fjpeg&dim=1080x608&blurhash=iAGIQGos00sD00sa9EM%7ExZRRoungn-X2jMowWYfB00X3%7EWs%3D%3FYss%250afs%3DxKWUais%3Boxn.RiRlad4.oe%3FHs%3B%25MaiR.WoD*&x=952f6c1b55d2ddba8d144ec592a97e6eb6ecf98274a868852e00fd4aa1129b18

## พฤหัสบดี 25/1/2024

- ใครมีบัตร Block Mountain และไปถึงเร็วอยากไปจอยที่ลาน One Nimman กินดื่ม พูดคุย หรือฟังเรื่อง NFT สามารถไปได้ โดยลงชื่อรับป้ายห้อยคอ (speaker/partner/ticketholder) ได้ที่ซุ้มกลางลานเลย

-------------

## ศุกร์ 26/1/2024 ช่วงกลางวัน @ อุทยานวิทยาศาสตร์

- คนที่ไม่ได้มาลงทะเบียนรับป้ายห้อยวันที่ 25 มาลงชื่อวันนี้ก็ได้

- ตั้งแต่ 11.00-15.00 มีของกินบริการที่ห้อง Networking

- 10.40-11.10 อ.พิริยะ ขึ้นพูดบนเวที

- 14.20-14.40 สภายาส้ม on Stage สั้น ๆ ก่อนไปจัดหนักตอนค่ำ

- 14.40-15.00 อ.พิริยะ ขึ้นพูด

- 15.00-15.20 พี่เดชา ขึ้นพูด

- 15.20-15.40 พี่จิม ขึ้นพูด (สภายาส้มเป็น MC กล่าวเชิญ)

- 15.40-16.00 พี่ชิต ขึ้นพูด (สภายาส้มเป็น MC กล่าวเชิญ)

## ศุกร์ 26/1/2024 ช่วงค่ำ @ One Nimman

- 18.00 อ.พิริยะขึ้นกล่าวต้อนรับผู้ชมร่วมกับพี่ป๊อป

- 18.10-19.20 สภายาส้ม on Stage

- 19.20-21.00 Bitcoin After Dark 4 มังกร (จิงโจ้ & ขิง MOD)

- 21.00-22.00 เวที เครื่องเสียงยังใช้ได้ เราขอให้พี่ป๊อป cancel นักดนตรีสดแล้วเปิดเพลงคลอเบา ๆ จะได้นั่งคุยกัน

- หลัง 22.00 ตามอัธยาศัย

-------------

## เสาร์ 27/1/2024 วิ่งเช้า (หรือเดินเขากับหวี)

- นัดรวมพลลานจอดรถข้างโรงแรม Travelodge Nimman ก่อน 7.00

- 7.00 เริ่มออกย่ำเท้า คาดว่าแต่ละคนจะใช้เวลาประมาณ 30-45 นาทีในการวิ่งไปถึงที่หมาย

- 7.45-8.00 พูดคุยตามอัธยาศัย ไหว้พระ

- 8.00-8.15 พี่บิตพูดหัวข้อสั้น ๆ

- 8.15 วิ่งกลับ

## เสาร์ 27/1/2024 ช่วงกลางวัน @ One Nimman

- สถานที่อยู่ใกล้ร้าน New Town Nimman ที่คนมา #North101 อยู่กัน สามารถเดินมาพูดคุย/ชูป้ายไฟแล้วเดินกลับได้

- 14.00-14.20 อาร์ม & หลาม ขึ้นพูดเรื่อง Nostr

- 14.20-14.40 nostr:npub1zk6u7mxlflguqteghn8q7xtu47hyerruv6379c36l8lxzzr4x90q0gl6ef ขึ้นพูด

## เสาร์ 27/1/2024 ช่วงเย็น @ One Nimman

- ส่วนของงาน Block Mountain เป็น Thank You Party เราถือบัตรห้อยคอ Speaker/Partner เข้าได้ฟรี อยู่ในระยะเดินถึงจากร้านพี่ชิต ที่จัดงาน #North101

- #North101 ยิงยาวตั้งแต่ตะวันยังไม่ตกดินจนร้านไล่กลับบ้าน

-------------

## อาทิตย์ 28/1/2024 @ Chit Hole

- 10.00-12.00 พี่ตั้ม อิสร จิงโจ้ และสมาชิกพิเศษจากคอมมูนอสเตอร์ในไทย (เดี๋ยวไปชวนหน้างาน 555) ขึ้นคุยหัวข้อ Community Talk

ป.ล. ผมกับอิสรไปตั้งแต่พุธ 24 นี้ ท่านไหนไปตั้งแต่วันนั้น เจอกันได้แถว ๆ Chit Hole นั่นแหละ😍

ผมมีบัตร after dark จะเข้าร่วมงาน วันที่ 26/1 ช่วงเย็นครับ

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!]()

สุดยอดครับ ขอสอบถามเบื้องต้นครับ การจะทำแบบนี้ได้ เราต้องลง Bitcoin core ซึ่งหมายความว่า เราต้องมี node รันอยู่ที่บ้านใช่มั้ยครับ

GM stake sats กันครับ เช้านี้ #siamstr

555

GM stake sats กันครับเช้านี้ 5555

Replying to Avatar Jingjo

เราสามารถเรียนรู้สัญญาณเตือนความสัมพันธ์ที่ล้มเหลว ผ่านภาพยนตร์โรแมนติกระดับตำนานอย่าง Midnight in Paris (2011) โดยคุณปู่วู้ดดี้ อัลเลนที่ฝีไม้ลายมือจัดจ้านและผ่านงานกำกับและเขียนบทมาโชกโชนไม่แพ้ผู้กำกับชื่อดังคนใดในโลก หนังโคตรดีขนาดเข้าชิง 4 รางวัลออสการ์ ไล่ตั้งแต่รางวัลภาพยนตร์ยอดเยี่ยมแห่งปี, ผู้กำกับยอดเยี่ยม, บทภาพยนตร์ดั้งเดิมยอดเยี่ยม (หนังชนะรางวัลในสาขานี้) และกำกับศิลป์ยอดเยี่ยม (ไม่น่าเชื่อว่าไม่ได้รางวัลนี้ โดยพลาดให้กับ Hugo ของมาร์ติน สกอร์เซซี่)

แต่ความยอดเยี่ยมของ Midnight in Paris ไม่ใช่สิ่งที่ผมอยากรีวิวถึงในโน้ตนี้ เพราะสิ่งที่โดดเด่นออกมาเตะตาผมคือความสัมพันธ์ของคู่ว่าที่สามี-ภรรยาในเรื่องที่มันส่งกลิ่นทะแม่ง ๆ ตั้งแต่ซีนแรก และเมื่อพิเคราะห์ตามศาสตร์ Redpill แล้วก็พบว่าหลายต่อหลายสัญญาณผิดปกตินั้นน่าสนใจศึกษาไว้ ทั้งสำหรับคนที่กำลังมีคู่ และคนที่คิดอยากจะมีในอนาคต

คำเตือน : #Redpill is super hard to swallow. Do not take it personally.

ต่อไปนี้คือ 10 สัญญาณเตือน (จากในหนัง) ที่ควรระวังให้ดี หากผู้หญิงแสดงออกสิ่งเหล่านี้ต่อคุณ ความสัมพันธ์คุณกำลังส่อเค้าหายนะ

1. เธอแสดงถึงความไม่ respect ในตัวคุณ ไม่ว่าคุณจะพูดเรื่องอะไร อธิบายอะไร บอกเล่าอะไร เธอไม่ฟัง ไม่อยากฟัง หรือหากฟังก็พร้อมจะโต้แย้งกลับให้คุณรู้สึกว่าความคิดหรือความรู้สึกของคุณนั้นไม่ได้สลักสำคัญอะไร โดยเฉพาะถ้าความคิดนั้นไปแย้งกับสิ่งทื่เธอต้องการ

2. เธอมักมีข้ออ้างเสมอเพื่อหลีกเลี่ยงการมีเซ็กส์กับคุณ

3. เธอกล่าวชื่นชมผู้ชายคนอื่นให้คุณฟังบ่อย ๆ

4. ครอบครัวเธอไม่ชอบคุณ และแสดงออกให้เห็นชัดเจนว่าไม่ชอบคุณ

5. เธอเลือกจะใช้เวลากับเพื่อนมากกว่าจะใช้เวลากับคุณ

6. เธอมีเพื่อนสนิทเป็นผู้ชาย (แม้ผู้ชายคนดังกล่าวจะมีเมียแล้วก็ตาม)

7. เธอมักทำให้คุณดูเป็นตัวตลกในสายตาเพื่อนเธอเสมอ ไม่ว่าเธอจะตั้งใจหรือไม่ก็ตาม

8. เธอมองว่าความฝันและเป้าหมายในชีวิตของคุณนั้นไร้สาระ และไม่สำคัญเท่าเป้าหมายของเธอ คุณควรจะเลิกเพ้อเจ้อและทำตามที่เธอชี้นิ้วบงการได้แล้วเสียที

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

10. (หากคุณยังไม่แต่งงานกัน) เธอมักจัดแจงทุกเรื่องเกี่ยวกับการแต่งงานเองในแบบที่เธอต้องการทั้งหมด โดยเฉพาะการต้องซื้อหรือก่อหนี้ก้อนโตเพื่อมีบ้าน รถ และสิ่งอำนวยความสะดวกตามที่เธอต้องการหลังแต่งงาน แต่สิ่งที่เธอไม่เคยพูดถึงเลยคือ "การมีลูก"

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

--------------------

ชาว redpiller มีมุมมองค่อนข้างตรงกันว่า หนึ่งใน The Biggest Lies ที่เฟมินิสต์อ่อมสมองผู้ชายมากเกินครึ่งศตวรรษคือวรรคคลาสสิกที่ว่า "Happy Wife, Happy Life." เพื่อชักจูงให้ผู้ชายยอมละทิ้งเกือบทุกอย่างเพื่อปรนเปรอให้ผู้หญิงได้ในสิ่งที่เธอปรารถนา (ซึ่งหากไม่โกหกตัวเอง ไม่ใช่แค่ผู้หญิงหรอก แต่ไม่มีใครเคย 'พอ' หากได้รับการเติมเต็มความปรารถนาอยู่ร่ำไป) ทั้งที่จริงแล้วการมีคู่ชีวิตที่ดีมันควรจะหมายถึงการที่คุณทั้งคู่เป็นเหมือนกับ "ทีม" เดียวกัน มีเป้าหมายร่วมกัน เสียสละและทุ่มเทเพื่อกันและกัน โดยมีจุดร่วมตรงกันว่าผู้ชายเป็นแกนหลักดูแลค้ำจุนครอบครัว และผู้หญิงเป็นผู้สนับสนุนให้เขาทำหน้าที่ของเขาได้เต็มที่ที่สุด เพื่อร่วมกันสร้างครอบครัวที่อบอุ่นแข็งแรง ครอบครัวอันเป็นโหนดย่อยที่สำคัญที่สุดของอารยธรรมมนุษย์มาช้านาน

The "Supportive Wife, Productive & Meannigful Life" mantra should replace that feminist lie we've heard for half a century. Set your frame and standards right, guys.

ป.ล. เบา ๆ อุ่นเครื่องรอ #สภายาแดง EP ใหม่ ที่จะมาเมื่อไหร่ก็ไม่รู้ 5555

#siamstr

ภรรยาผมนี่โดนหลายข้อเลย555

อยากลองรัน node เหมือนกันครับแต่ไม่มีความรู้ เลยยังไม่กล้าทำครับ

Replying to Avatar U

สวัสดี ชาว #North101 เชียงใหม่ ทักครับ

🎟️ ลิงค์จองตั๋วไปนั่งติดขอบกะละมัง มาแล้ว

ไปนั่งพูดคุยส่งเสียงรบกวนชาวสภายาหลากสี ที่รอบนี้ขนยาส้มไปเต็มกระเป๋า

สิทธิพิเศษ สำหรับชาวบิทคอยน์เนอร์

ซื้อตั๋ววันนี้ รับฟรีกะละมัง พร้อม ชุดเซ็ตผงซักฟอกและน้ำยาปรับผ้านุ่มกลิ่นชีสเบอร์เกอร์*

สนับสนุนโดย nostr:npub1xzh2kqynr29x6j3ln6x05f26ha0c0ucfr280uzljftlgcthv9r6skqe7dt นายกสมาคมผู้นิยมการซักมือแห่งประเทศไทย

โอเค...ไปไกลล่ะ กลับมา

📍Block Mountain Bitcoin After Dark Welcome party

วันที่ 26/1/2024 : 18:00-21:00

ใช้โค้ด: RS10 ราคา 720 บาท (ราคาปกติ 800 บาท)

จองตั๋วได้เลยที่:

https://www.eventpop.me/e/16509-https-blockmountaincnx-com/https-blockmountaincnx-com?aff=RS

แล้วพบกันนะคะ 🤙

*กะละมังพร้อมชุดเซ็ต เป็นเพียงคำโฆษณา สินค้าไม่อยู่จริง 🤣

จ่ายราคาเต็มครับวันนี้ ไม่มีช่องใส่ส่วนลด555

Replying to Avatar Arn Sange

Rewine 2023

🚨 ALERT Ultra-long form detected ‼️

เอาจริงผมรู้จัก bitcoin มาตั้งแต่ 1-2 ปีที่แล้วแระ จากวงการ crypto ฟัง อจ ตั๊ม ซื้อ นส bitcoin std มาอ่าน แต่ก้อ่านได้แค่เฉลี่ยอาทิตย์ละ 3-4 หน้า ยังผ่านจักรวรรดิ์โรมันไม่พ้นเลยมั้ง แล้วที่อ่านผ่านส่วนใหญ่ก้เคยได้ยิน อจ ตั๊ม พูดไปแล้วด้วย ต่อมาอยู่ดีๆ ผมก้ผ่านช่วงหนีตาย luna มาได้แบบงงๆ จนสุดท้ายผมต้องแบ่งเวลามาเตรียมสอบเรียนต่อ ก้ต้องตัดใจวางมือ ขายทุกอย่างแล้วโอนเป็นเงินบาทออกทาง bitkub

พอมาปีนี้ ช่วงที่ปิดเทอม ผมก้ว่างจัด กะว่าจะฝืนอ่าน bitcoin std (เอาจิงคือหาเรื่องไปร้านกาแฟแหละ555) ให้จบก่อนเปิดเทอม จนผมไปอ่านถึงตรงที่พูดถึง time preference มันเป็นคำที่ใหม่มาก ตอนแรกผมไม่เข้าใจว่ามันคืออะไรกันแน่ จนต้องอ่านวนย้ำไปสองสามรอบ พอเข้าใจแล้วผมจึง CLICK! กับหนังสือเล่มนี้มาก มันเหมือนกับเป็นส่วนคอขวดที่ถ้าผ่านไปได้มันจะ unlock ทุกๆ อย่างของหนังสือเล่มนี้ มันเหมือนเป็นการเตือนสติตัวเองว่าที่ผ่านมาเราใช้ชีวิตเละเทะได้ขนาดไหน ผมเทียบกับการทำสมาธิแบบวิปัสนากรรมฐาน คือให้ตระหนักรู้ทุกการกระทำว่ากำลังทำอะไรอยู่ ให้จิตนำก่อนกาย ยุบหนอ พองหนอ มีอารมณ์หนอ คันหนอ เมื่อยหนอ ถ้าในบริบทนี้ก้คง โหยหาผลตอบแทนระยะสั้นหนอ มั้ง

สุดท้ายผมก้มีใจอ่านต่อได้จนจบเล่ม เข้าใจบ้างไม่เข้าใจบ้าง ตามย้อนฟังทั้งจาก อจ ตั๊ม กับคลิปอื่น เก็บตกประเด็นต่างๆ ที่ยังงงๆ อยู่ อย่างเช่น self custodial ผมตามย้อนดูคลิปสอนทุกจ้าวอยู่นานพอตัว (ช่วงนั้นตอนข่าว ledger มีปัญหา) เลยกัดฟันลองซื้อ trezor มาลองดู พอได้ลองใช้งานจึงเข้าใจเลยว่า อารมณ์ของการเก็บเงินดิจิทัลได้เองมันเป็นยังไง แทนที่จะเอาเวลามากังวลข่าว fud exchange กลัวถอนไม่ทัน สู้เอาไปเก็บเอง จบ…

ต่อมาก้รู้สึกว่าตัวเองร้อนวิชา อารมณ์ต้นๆ กราฟ dunning-kruger งะ อยากป้ายยาส้ม เลยเริ่มจากพ่อแม่ และญาติก่อน ซึ่งก้ค่อนข้าง suffer อยู่ เพราะสุดท้ายก้มาลงเอยด้วย mindset ว่าเงินต้องเป็นสิ่งของที่จับต้องได้เท่านั้น ทำให้มันไม่สามารถปรับความเข้าใจได้ง่ายๆ เรย พูดมากๆ ก้ไม่ฟัง และยังโดนว่าอีก อย่าเล่นเยอะ ถอนออกมาเหอะ ทั้งที่คนนึงไม่มีเงินเก็บเลย กับอีกคนนึงที่กะจะเล่นหุ้นในวัยเกษียณทั้งที่เริ่มจากการเล่นตามเพื่อนที่ทำงานแบบงูๆปลาๆ เดี๋ยวซื้อเดี๋ยวขาย ด้วยวงเงินหลักล้าน

จนกระทั่งในช่วงไม่กี่เดือนก่อนจะหมดปี ที่ อจ ตั๊มและทีม right shift ก้ได้แนะนำให้ลองเล่น nostr ดู แล้วผมก้ลองแบบขำๆ ไม่ได้คาดหวังอะไรจาก platform มากนักว่าจะมีอะไรน่าสนใจ คิดว่าเป็นการทดลองการ adopt lightning btc มาลองใช้ใน social media แต่ด้วยความที่คนไทยที่เล่น nostr ที่ก้เป็น bitcoiner นั้นล้วนมีความอัดอั้นจาก social media และ msm อื่นๆ มาอย่างโชกโชน จึงทำให้เกิด long form เยอะมาก บ่นชีวิตเฟียตๆ shadowban censorship algorythm หัวข้อ libertarian keynesian-austrian และอีกโคตรเยอะ ผมก้เป็นหนึ่งในนั้นที่สร้าง content long form จากประสบการณ์วัยเด็กตัวเองในช่วงแรกๆ ช่วงนั้นคืออยู่ดีๆ พอเจออะไรน่าสนใจ หรือนึกประเด็นอะไรที่เคยรู้สึก pain มาก่อน ก้จะพยายามเรียบเรียงออกมาเป็น long form แล้วเอาลง nostr เอาจริงๆ สิ่งที่ผมชอบใน nostr community คือ แม้ว่ามันจะมีความพยายามจะ incognito ระหว่าง user พอสมควร แบบว่าเวลาลงรูปจะพยายามไม่ค่อยให้เห็นหน้ากัน เหมือนกับที่ผมเจอใน discord ส่วนใหญ่ (แต่ไม่ใช่กับคนไทยมั้ง 555) และก้มันรู้สึกเป็น echo chamber อยู่พอควร แต่รู้สึกลึกๆ ว่าแต่ละ post แต่ละ note ที่เราได้ลงไป แม้จะไม่มีคนกด reaction แต่รู้สึกว่าหลายคนได้เห็น post นี้จริงๆ อาจด้วยว่าแรกๆ มันมีแต่บทความไม่ค่อยมีการ post ภาพ มันเลยไม่ค่อยดัน post ที่เป็นข้อความ บวกกับการไม่มี algorythm (ที่เลือกแต่ภาพอวดชีวิตติดหรู pseudo-elite ของเพื่อนๆ ไม่ก้แค่ภาพ selfie จนดันอะไรที่มีสาระหายไปหมด หรือบางทีเขาอาจไม่สนใจอะไรสาระๆยาวๆอยู่แล้วก้ได้ อย่างมากแค่เสพมาม่าก้เหนื่อยแล้ว) ทำให้ทุก post จะได้รับโอกาสที่จะมีคนมองเห็นอย่างเท่าเทียมตามเวลาที่ post และการ repost ผมชอบมากว่าอย่างน้อย PoW ที่เราลงไปมันก้ไม่สูญเปล่าไปซะทีเดียว และเพราะส่วนใหญ่มันเป็น content สาระแบบ unfiat ที่หาไม่ได้ใน msm ที่เค้นจาก ปสก และความรู้ที่มันผ่านการ thoroughly breakthrough มาแล้ว

ผมอยู่ในนี้ผมได้ลองอะไรใหม่ๆ หลายอย่างมากๆ อย่างการ zap การใช้ lightning wallet และโดยเฉพาะเรื่องสุขภาพจากพรี่หมอ @Fastingfatdentist อย่างการกินเนื้อ เกลือ if keto การอาบน้ำ grounding ตากแดด(ที่ผมทำคือใส่เสื้อกล้ามไปเดินรอบอ่างแก้ว มช รอบนึงตอน10-11โมง แดดเปรี้ยงๆฉ่ำๆ) จริงๆ ผมก้ออกกำลังระวังเรื่องการกินมาก่อนแล้ว แต่หลังจากพยายามปรับ lifestyle แล้ว ผมรู้สึกกระชุ่มกระชวยมากขึ้นกว่าแต่ก่อนนะ รู้สึกว่าแต่ละวันมันดูมีความหมายมากขึ้น จากเดิมที่ถึงแม้ตัวเองจะตื่นเช้าแต่กลับไม่สดใส รู้สึก S.A.D. ตลอดวัน

จากทั้งหมดในปีนี้ โดยเฉพาะช่วงครึ่งปีหลัง มันทำให้ผมรู้สึกว่า พอเราได้รู้จักได้ศึกษา bitcoin ในมุมมองต่างๆ ที่ทำให้การมีอยู่ของมันกว่า 10 ปี แสดงให้เห็นในหลายๆ มุมมอง ทั้งการเป็นเงินและสิ่งที่นอกเหนือการเป็นเงิน ทำให้เกิดการตระหนักรู้อย่าง“วิปัสนา”มากขึ้น รู้ทันตัวเองมากขึ้น มองเหตุการณ์ต่างๆ ที่เกิดขึ้นบนโลกในมุมมองที่เปลี่ยนไปแบบไม่ปล่อยผ่าน ได้มีประสบการณ์กับ community ที่แปลกใหม่ที่ผมก้ไม่คิดว่าจะมีโอกาสได้เจออะไรแบบนี้ ผมต้องขอขอบคุณ อจ ตั๊ม และทีมงาน right shift ทุกคน ทั้งเบื้องหน้าและเบื้องหลัง ที่ทำให้มันเกิดขึ้น และจากทั้งหมดนี่ ผมจึงเชื่ออย่างสุดจัย (ซึ่ง G-man ก้ไม่ได้กล่าวไว้) ว่า

“The right money in the wrong place can make all the difference in the world”

Merry Xmas , Happy new year and see U next halving งับ

#siamstr

#reflecting2023

ตอนผมเรียนมหาลัย ไม่เคยคิดอะไรแบบนี้ได้เลย อ่านแล้วรู้สึกอยากกลับไปด่าตัวเองในอดีต ( อดีตที่ไกลมากๆ5555 )

GM อ.ฝาง จ.เชียงใหม่ หนาวแล้วจ้า #siamstr