對於自己想要永遠銘記的事情,刺青對某些人來說是個好選項,畢竟感覺上,刺青很像在自己身上刻碑。
在區塊鏈世界裡,有某種使用方式是,把交易的訊息當作「永遠留存的內容」,例如可以是一段字,一張圖。只是成本不低啊,以那個金字碑的碑文,小於200 bytes,放到ETH網路(以太坊)至少要7美元。所以那時候沒特別想嘗試。
不過前幾天,我發現原來川普幣,並不是基於ETH,而是Solana。稍微研究一下發現Solana的交易特別便宜,至少比ETH便宜很多。要把金字碑文刻在Solana上面,其實僅需要0.001146美金。 我們當然不知道川普是不是因為交易費便宜而選Solana,但看起來solana的規模確實因為川普的關係變大了一些。
當然要做這件事情,千萬不能買川普幣來做,如果用川普幣就不只0.001146美金,最便宜的是找便宜的迷因幣或者自己弄個幣。
這裡我們用 Solana 當例子,示範如何把金字碑文當成刺青寫到鏈上,並且搭配自己發行的代幣。整個過程會用 Python 腳本來實作。
整體流程
建立一個錢包帳號:這是你在 Solana 上的身分。
建立一個自己的 Token:假設發行 1000 個單位,當作我們的「刺青代幣」。
建立交易並加上 Memo:利用 Token 做交易時,在交易裡附帶 Memo 指令,這個 Memo 就是刺青內容,例如「life is great」。
查詢交易記錄:透過交易簽名(transaction signature),可以查到這筆交易,並讀到當初留下的文字。
範例程式
以下四個 Python 腳本都是在 Solana Devnet 測試網上執行。正式主網(mainnet-beta)使用方式相同,只是需要真實的 SOL。
a. 建立錢包帳號
from solana.keypair import Keypair
import json
kp = Keypair()
secret = list(kp.seed + kp.public_key.__bytes__())
with open("wallet.json", "w") as f:
json.dump(secret, f)
print("wallet created")
print("Public Key:", kp.public_key)
b. 建立自己的 Sol Token(假設 1000 個)
import json
from solana.rpc.api import Client
from solana.keypair import Keypair
from spl.token.constants import TOKEN_PROGRAM_ID
from spl.token.instructions import initialize_mint, InitializeMintParams
from solana.system_program import CreateAccountParams, create_account
from solana.transaction import Transaction
client = Client("https://api.devnet.solana.com")
payer = Keypair.from_secret_key(bytes(json.load(open("wallet.json"))[:32]))
mint_kp = Keypair()
mint_rent = client.get_minimum_balance_for_rent_exemption(82)["result"]
tx = Transaction().add(
create_account(CreateAccountParams(
from_pubkey=payer.public_key,
new_account_pubkey=mint_kp.public_key,
lamports=mint_rent,
space=82,
program_id=TOKEN_PROGRAM_ID
)),
initialize_mint(InitializeMintParams(
decimals=0,
program_id=TOKEN_PROGRAM_ID,
mint=mint_kp.public_key,
mint_authority=payer.public_key,
freeze_authority=payer.public_key
))
)
sig = client.send_transaction(tx, payer, mint_kp)["result"]
print("Token Mint Done:", mint_kp.public_key)
c. 建立交易並寫入 Memo(刺青)
import json
from solana.rpc.api import Client
from solana.keypair import Keypair
from solana.transaction import Transaction
from spl.memo.instructions import create_memo, MemoParams
client = Client("https://api.devnet.solana.com")
payer = Keypair.from_secret_key(bytes(json.load(open("wallet.json"))[:32]))
text = "雙旌遙向淡蘭來,此日登臨眼界開。大小雞籠明積雪,高低雉堞挾奔雷。穿雲十里連稠隴,夾道千章蔭古槐。海上鯨鯢今息浪,勤修武備拔良才" # 其實就是三貂嶺金字碑
ix = create_memo(MemoParams(signers=[payer.public_key], memo=text.encode("utf-8")))
tx = Transaction().add(ix)
sig = client.send_transaction(tx, payer)["result"]
print("(signature):", sig)
d. 查詢交易,讀出刺青
from solana.rpc.api import Client
import base64
client = Client("https://api.devnet.solana.com")
sig = input("輸入交易簽名: ")
tx = client.get_transaction(sig, max_supported_transaction_version=0)["result"]
for ix in tx["transaction"]["message"]["instructions"]:
if ix["programIdIndex"] == 1: # Memo program
data = base64.b64decode(ix["data"])
print("找到刺青內容:", data.decode("utf-8"))
成本說明
在 Devnet 測試網路,所有 SOL 都是免費領取的,不需要真實支出。
但如果換成主網,成本主要來自兩個部分:
交易手續費
每筆交易大約 5,000 lamports
1 SOL = 1,000,000,000 lamports
換算約 0.000005 SOL ≈ 0.0012 美元
帳戶租金 (rent-exempt)
Mint 帳戶約 0.002--0.01 SOL\
Token Account 約 0.002 SOL\
Metadata(若有)約 0.005 SOL\
合計大約 0.5--2 美元 一次性存放
所以在主網發一個新代幣,並且刻下一個刺青,總成本大概就是 1 美元上下,取決於 SOL 當時的市價。
「數位刺青」是透過公開可信區塊鏈,我們可以把一句話,一張圖,甚至一段影片,永遠留在去中心化的帳本裡,任何人都能查證。