當 Sealos 遇上區(qū)塊鏈

當 Sealos 遇上區(qū)塊鏈

拿著區(qū)塊鏈技術不一定是去發(fā)幣,很多業(yè)務系統(tǒng)也適合用這些技術七蜘,比如做個統(tǒng)一支付系統(tǒng)谭溉,積分系統(tǒng)等,可以做為一家公司的金融基礎設施橡卤,或支付中臺扮念。拿鏈的技術去做有很多好處:

  • 高可用,自帶多區(qū)域高一致性的能力碧库,自帶高可用能力和校驗能力柜与。
  • 安全,很大程度防范黑客或者用戶篡改資金賬戶的可能性嵌灰,非對稱加密能力完備弄匕。
  • 有成熟的支付和轉賬等能力,只需要調用幾個簡單接口就可以完成金額轉化沽瞭。
  • 高魯棒性迁匠,每個新 region 都可以在本地跑一個礦工節(jié)點,本地節(jié)點負責與其他節(jié)點建立 p2p 通信驹溃。
  • 多數(shù)據(jù)中心數(shù)據(jù)強一致性城丧,不會出現(xiàn)因為網(wǎng)絡問題導致數(shù)據(jù)腦裂。
  • 智能合約可以探索更多業(yè)務可能性豌鹤,可擴展性好亡哄。

比如這就是基于區(qū)塊鏈技術實現(xiàn)的一套統(tǒng)一支付系統(tǒng)的架構圖,主要是利用區(qū)塊鏈打造一個數(shù)據(jù)基礎設施布疙。

本文主要講如何構建這樣一套方案的實現(xiàn)細節(jié)蚊惯,主要核心用的技術有:

  • substrate 框架愿卸,現(xiàn)在合并到了 polkadot-sdk 中了,區(qū)塊鏈底層截型。
  • sealos 用來容器化方式啟動區(qū)塊鏈趴荸。
  • laf 用來寫代碼實現(xiàn)用戶賬戶創(chuàng)建,轉賬等操作的例子菠劝。

啟動區(qū)塊鏈

打開 https://cloud.sealos.io 應用管理

image
image

命令行參數(shù)詳情:

["--name","sealchain","--chain","/etc/customSpec.json","--rpc-external","--rpc-cors","all"]

這里的配置文件略惡心赊舶,開始測試時可以先不加,去掉 --chain /etc/customSpec.json 參數(shù)就行赶诊。

這個配置是通過命令生成的:

$ substrate build-spec > myCustomSpec.json

這個配置里面有一個 system code 非常惡心非常長笼平,它是編譯成 wasm 的代碼,不能刪舔痪,所以這個配置只能先生成了再修改配置文件寓调,substrate 的這個做法我實在不太能茍同,導致編輯配置文件的成本非常高锄码。

測試聯(lián)通性

https://laf.dev/ 起一個應用夺英,寫一個函數(shù),這個不用教滋捶,以你的智商和 laf 的易用性你肯定會痛悯,當然如果你的時間不值錢你也可以自己構建個 node.js 環(huán)境,我可以確保自己構建環(huán)境可以惡心死你重窟。

image

當日志正常輸出時载萌,表示鏈已經正常工作了。

import cloud from '@lafjs/cloud'
const { ApiPromise, WsProvider } = require('@polkadot/api');

export default async function (ctx: FunctionContext) {
  const provider = new WsProvider('wss://mlnqtutcpqcy.cloud.sealos.io');
  const api = await ApiPromise.create({ provider });

  const chain = await api.rpc.system.chain();
  const lastHeader = await api.rpc.chain.getHeader();

  console.log(`Connected to chain ${chain} and block number ${lastHeader.number}`);
}

創(chuàng)建賬戶(Keyring)

import cloud from '@lafjs/cloud'
import { Keyring } from '@polkadot/keyring';
import { mnemonicGenerate } from '@polkadot/util-crypto';

export default async function (ctx: FunctionContext) {
  // 生成一個新的 12 個單詞的助記詞
  const mnemonic: string = mnemonicGenerate(12);
  console.log(`Mnemonic: ${mnemonic}`);

  // 創(chuàng)建一個新的 keyring
  const keyring = new Keyring({ type: 'sr25519' });

  // 從助記詞創(chuàng)建一個新的賬戶
  const pair = keyring.addFromMnemonic(mnemonic);
  console.log(`Address: ${pair.address}`);
}

這里不需要連接鏈上巡扇,本質上用戶的賬戶是公鑰扭仁,而公私鑰通常比較難記,而且大小寫什么的還容易看錯厅翔,比如 0 和 o,1 和 l, 所以人們很聰明的弄出了助記詞乖坠,根據(jù) 12個常用單詞來生成密鑰對,這下就好記了刀闷,所以你的助記詞是你的一切熊泵,千萬別讓別人知道了,類似這個樣子:

unhappy enforce oil ridge zebra pupil razor worth polar inform enter bomb

地址長這個樣子:

5HjoX44CVrqTpVLqYtiF2cFSmDwtbNUfrbKcEbKDyLnP8NCv

下面我們就可以從超級賬戶里面轉賬到這個賬戶里了涩赢,再去查詢這個賬戶的資金戈次。

轉賬

為了方便,稍微封裝一下 API

import { ApiPromise, WsProvider, Keyring } from '@polkadot/api'
// 連接到你的Polkadot節(jié)點
const provider = new WsProvider('wss://mlnqtutcpqcy.cloud.sealos.io');
let api = null

export async function getAPI() {
  if(!api) {
    api = await ApiPromise.create({ provider });
  }

  return api
}

從超級賬戶轉帳

import cloud from '@lafjs/cloud'
import { ApiPromise, Keyring } from '@polkadot/api'
import { getAPI } from '@/api'

export default async function (ctx: FunctionContext) {

  const api = await getAPI()

  // 創(chuàng)建一個新的Keyring實例筒扒,并添加Alice賬戶
  const keyring = new Keyring({ type: 'sr25519' });
  // 超級賬戶的私鑰
  const alicePair = keyring.addFromUri('slender alter hybrid catalog feature video pumpkin random sniff advice spoil apple');  // Alice的助記詞

  // 你的接收者地址和轉賬金額
  const recipientAddress = '5HjoX44CVrqTpVLqYtiF2cFSmDwtbNUfrbKcEbKDyLnP8NCv';  // 替換為你的接收者地址
  const amount = 1024000000000;  // 替換為你要轉賬的金額

  // 查詢Alice賬戶的余額
  const { data: balance } = await api.query.system.account(alicePair.address);

  console.log(`Alice's balance is ${balance.free}`);

  // 創(chuàng)建并發(fā)送轉賬交易
  const transfer = api.tx.balances.transferAllowDeath(recipientAddress, amount);
  const hash = await transfer.signAndSend(alicePair, { nonce: 6});

  console.log(`Transfer sent with hash ${hash.toHex()}`);
}

再去查詢一下賬戶有沒有收到錢:

import cloud from '@lafjs/cloud'
import { ApiPromise, Keyring } from '@polkadot/api'
import { getAPI } from '@/api'

export default async function (ctx: FunctionContext) {
  const api = await getAPI()

  // 查詢Alice賬戶的余額
  const { data: balance } = await api.query.system.account('5HjoX44CVrqTpVLqYtiF2cFSmDwtbNUfrbKcEbKDyLnP8NCv');

  console.log(`Alice's balance is ${balance.free}`);
}

至此,你已經學會了在 sealos 上啟動一個區(qū)塊鏈绊寻,并借助 laf 進行一些基礎開發(fā)與鏈交互花墩,祝大家未來踩縫紉機愉快悬秉。 下面來點高級的。

鏈超級管理員配置

超級管理員的錢是從 substrate 的 genesis 也就是創(chuàng)始塊的配置文件中得來的:

{
  "name": "Sealchain",
  "id": "sealos_net",
  "chainType": "Live",
  "bootNodes": [
    ],
  "telemetryEndpoints": null,
  "protocolId": null,
  "properties": null,
  "codeSubstitutes": {},
  "genesis": {
    "runtime": {
      "system": {
        "code": 275debf565db8f5318502....980e6412a472c0af5e652d25fa9838a78d0a8449688794d7749638feb6b93e0191ac90b07516"
      },
      "aura": {
        "authorities": [
          "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
          "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty"
        ]
      },
      "grandpa": {
        "authorities": [
          [
            "5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu",
            1
          ],
          [
            "5GoNkf6WdbxCFnPdAnYYQyCjAKPJgLNxXwPjwTh6DGg6gN3E",
            1
          ]
        ]
      },
      "balances": {
        "balances": [
          [
            "5Gh3LUk21PtfZMTnQRZDqGDVwD2mozQdwHyKRj6PW6n9r65C",
            1152921504606846976
          ],

          [
            "5CRmqmsiNFExV6VbdmPJViVxrWmkaXXvBrSX8oqBT8R9vmWk",
            1152921504606846976
          ]
        ]
      },
      "transactionPayment": {
        "multiplier": "1000000000000000000"
      },
      "sudo": {
        "key": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"
      }
    }
  }
}

這個文件大家務必不要復制粘貼冰蘑,因為里面的 runtime.system.code 字段是編譯后的 wasm和泌,所以一定要用命令生成這個文件,在這個文件基礎上去修改才行祠肥,我被這個問題坑死武氓。

然后 balances 字段就可以配置初始地址里面的資金,這個地址用上面的代碼生成就行仇箱,私鑰你自己保存好县恕,不用觸網(wǎng)。 配置起來很簡單剂桥,祝大家財務自由忠烛。

image

然后在 sealos 里面新增配置,在命令行指定配置文件即可权逗。

自行構建鏈的容器鏡像

有個編譯 rust 的環(huán)境

https://docs.substrate.io/tutorials/build-a-blockchain/build-local-blockchain/
git clone https://github.com/substrate-developer-hub/substrate-node-template
cargo build --release
FROM ubuntu:23.10
RUN apt update && apt install --assume-yes git clang curl libssl-dev protobuf-compiler && rm -rf /var/lib/apt/lists/*
COPY ./target/release/node-template .
CMD ./node-template --dev

【友情提醒:搬磚有風險美尸,跑鏈需謹慎,若踩縫紉機斟薇,親人兩行淚】
sealos 以kubernetes為內核的云操作系統(tǒng)發(fā)行版师坎,讓云原生簡單普及

laf 寫代碼像寫博客一樣簡單,什么docker kubernetes統(tǒng)統(tǒng)不關心堪滨,我只關心寫業(yè)務胯陋!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市椿猎,隨后出現(xiàn)的幾起案子惶岭,更是在濱河造成了極大的恐慌,老刑警劉巖犯眠,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件按灶,死亡現(xiàn)場離奇詭異,居然都是意外死亡筐咧,警方通過查閱死者的電腦和手機鸯旁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來量蕊,“玉大人铺罢,你說我怎么就攤上這事〔信冢” “怎么了韭赘?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長势就。 經常有香客問我泉瞻,道長脉漏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任袖牙,我火速辦了婚禮侧巨,結果婚禮上,老公的妹妹穿的比我還像新娘鞭达。我一直安慰自己司忱,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布畴蹭。 她就那樣靜靜地躺著坦仍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撮胧。 梳的紋絲不亂的頭發(fā)上桨踪,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音芹啥,去河邊找鬼锻离。 笑死,一個胖子當著我的面吹牛墓怀,可吹牛的內容都是我干的汽纠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼傀履,長吁一口氣:“原來是場噩夢啊……” “哼虱朵!你這毒婦竟也來了?” 一聲冷哼從身側響起钓账,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤碴犬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后梆暮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體服协,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年啦粹,在試婚紗的時候發(fā)現(xiàn)自己被綠了偿荷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡唠椭,死狀恐怖跳纳,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情贪嫂,我是刑警寧澤寺庄,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響铣揉,放射性物質發(fā)生泄漏饶深。R本人自食惡果不足惜餐曹,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一逛拱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧台猴,春花似錦朽合、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至休讳,卻和暖如春讲婚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俊柔。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工筹麸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雏婶。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓物赶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親留晚。 傳聞我的和親對象是個殘疾皇子酵紫,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容