測試如何用Cosmos創(chuàng)建并交易通證(test how to issue and transfer tokens using cosmos)

本測試嘗試用cosmos-sdk的最新版本在本地構(gòu)建一個兩個節(jié)點(fincoinfabcoin)的區(qū)塊鏈(finfab-chain)沼瘫,并發(fā)行兩種通證,一個稱為FinCoin, 另外一個稱為FabCoin初烘。之后,進行一次FabCoin的交易师逸,從一個賬戶轉(zhuǎn)100個通證到另外一個賬戶津滞。

This test is an attempt to use the latest cosmos-sdk source to run a blockchain called (finfab-chain) with two nodes, fincoin node and fabcoin node. Then issue two tokens, FinCoin token and FabCoin token and transfer 100 FabCoin from one account to the other account.


系統(tǒng)準備 (system)

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

$ go version
go version go1.9.3 linux/amd64

$ echo $GOPATH 
/opt/projects/go

下載源代碼并編譯 (download source and compile)

$ go get github.com/cosmos/cosmos-sdk
$ cd $GOPATH/src/github.com/cosmos/cosmos-sdk
$ make get_tools
cd tools && make get_tools
make[1]: Entering directory '/opt/projects/github.com/cosmos/cosmos-sdk/tools'
Dep is already installed.  Run 'make update_tools' to update.
make[1]: Leaving directory '/opt/projects/github.com/cosmos/cosmos-sdk/tools'

$ make update_tools
cd tools && make update_tools
make[1]: Entering directory '/opt/projects/github.com/cosmos/cosmos-sdk/tools'
Updating dep
go get -u -v github.com/golang/dep/cmd/dep
github.com/golang/dep (download)
make[1]: Leaving directory '/opt/projects/github.com/cosmos/cosmos-sdk/tools'

$ make get_vendor_deps
--> Running dep ensure
Gopkg.lock was already in sync with imports and Gopkg.toml
(1/49) Wrote github.com/mattn/go-isatty@v0.0.3
(2/49) Wrote github.com/pkg/errors@v0.8.0
(3/49) Wrote github.com/pelletier/go-toml@v1.1.0
(4/49) Wrote gopkg.in/yaml.v2@v2.2.1
(5/49) Wrote github.com/gorilla/context@v1.1.1
(6/49) Wrote github.com/davecgh/go-spew@v1.1.0
(7/49) Wrote github.com/rcrowley/go-metrics@master
(8/49) Wrote github.com/mitchellh/mapstructure@master
(9/49) Wrote github.com/ebuchman/fail-test@master
(10/49) Wrote github.com/pmezard/go-difflib@v1.0.0
(11/49) Wrote github.com/fsnotify/fsnotify@v1.4.7
(12/49) Wrote github.com/bgentry/speakeasy@v0.1.0
(13/49) Wrote github.com/golang/snappy@master
(14/49) Wrote github.com/hashicorp/hcl@master
(15/49) Wrote github.com/gorilla/mux@v1.6.2
(16/49) Wrote github.com/go-logfmt/logfmt@v0.3.0
(17/49) Wrote github.com/go-kit/kit@v0.6.0
(18/49) Wrote github.com/spf13/afero@v1.1.0
(19/49) Wrote github.com/go-stack/stack@v1.7.0
(20/49) Wrote github.com/golang/protobuf@v1.0.0
(21/49) Wrote github.com/gorilla/websocket@v1.2.0
(22/49) Wrote github.com/spf13/cast@v1.2.0
(23/49) Wrote github.com/tendermint/go-crypto@v0.6.2
(24/49) Wrote github.com/tendermint/go-wire@v0.7.3
(25/49) Wrote github.com/spf13/cobra@v0.0.3
(26/49) Wrote github.com/tendermint/iavl@v0.7.0
(27/49) Wrote github.com/spf13/jwalterweatherman@master
(28/49) Wrote github.com/btcsuite/btcd@master
(29/49) Wrote github.com/tendermint/tmlibs@v0.8.3-rc0
(30/49) Wrote github.com/spf13/pflag@v1.0.1
(31/49) Wrote github.com/jmhodges/levigo@master
(32/49) Wrote github.com/howeyc/crc16@master
(33/49) Wrote github.com/syndtr/goleveldb@master
(34/49) Wrote github.com/inconshreveable/mousetrap@v1.0
(35/49) Wrote github.com/tendermint/abci@v0.10.3
(36/49) Wrote github.com/spf13/viper@v1.0.2
(37/49) Wrote golang.org/x/crypto@master
(38/49) Wrote github.com/kr/logfmt@master
(39/49) Wrote github.com/tendermint/tendermint@v0.19.5-rc1
(40/49) Wrote github.com/tendermint/ed25519@master
(41/49) Wrote github.com/stretchr/testify@v1.2.1
(42/49) Wrote github.com/magiconair/properties@v1.8.0
(43/49) Wrote github.com/tendermint/go-amino@0.9.9
(44/49) Wrote github.com/gogo/protobuf@v1.0.0
(45/49) Wrote google.golang.org/genproto@7fd901a49ba6a7f87732eb344f6e3c5b19d1b200
(46/49) Wrote google.golang.org/grpc@v1.7.5
(47/49) Wrote golang.org/x/net@master
(48/49) Wrote golang.org/x/text@v0.3.0
(49/49) Wrote golang.org/x/sys@master

$ make install
go install -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=187be1a5" ./cmd/gaia/cmd/gaiad
go install -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=187be1a5" ./cmd/gaia/cmd/gaiacli

Cosmos gaia 版本確認 (cosmos gaia version check)

$ gaiad version
0.17.2-187be1a5

$ gaiacli version
0.17.2-187be1a5

創(chuàng)世紀設(shè)定 (genesis configuration)

$ gaiad init gen-tx --name=fincoin --home=/opt/data/cosmos/fincoin
{
  "app_message": {
    "secret": "inner space weird carry near high moral slot hero drum smart satoshi boat vital assault abandon"
  },
  "gen_tx_file": {
    "node_id": "c519ca2cc2257eb62a95a61c45268ade1ee35d59",
    "ip": "172.x.x.x",
    "validator": {
      "pub_key": {
        "type": "AC26791624DE60",
        "value": "hNwHCN3J/FSa5nCJDgikkSh3znhv9ZrRZUU+kkvw1Uc="
      },
      "power": 100,
      "name": ""
    },
    "app_gen_tx": {
      "name": "fincoin",
      "address": "3A8E0270F2D5D6128DC4C77B5656C0ADB5379C11",
      "pub_key": {
        "type": "AC26791624DE60",
        "value": "hNwHCN3J/FSa5nCJDgikkSh3znhv9ZrRZUU+kkvw1Uc="
      }
    }
  }
}

$ gaiad init gen-tx --name=fabcoin --home=/opt/data/cosmos/fabcoin
{
  "app_message": {
    "secret": "mushroom practice juice burst expire scorpion frozen clay catalog erosion draft bulk blush rug arrive abandon"
  },
  "gen_tx_file": {
    "node_id": "fc93204300fedd2076d9ec82bf7be589b30ec923",
    "ip": "172.x.x.x",
    "validator": {
      "pub_key": {
        "type": "AC26791624DE60",
        "value": "R3l0Y86zKYhaKnqliVu/sQInGUiYB/8AXNbp1hAsE7k="
      },
      "power": 100,
      "name": ""
    },
    "app_gen_tx": {
      "name": "fabcoin",
      "address": "FB983823EC3A541193E61DBF1DAF8CFF4C90F02E",
      "pub_key": {
        "type": "AC26791624DE60",
        "value": "R3l0Y86zKYhaKnqliVu/sQInGUiYB/8AXNbp1hAsE7k="
      }
    }
  }
}

$ gaiacli keys list
NAME:   ADDRESS:                    PUBKEY:
fabcoin FB983823EC3A541193E61DBF1DAF8CFF4C90F02E    1624DE6220C6EEE1CCD437A5214499631559379D64023B1C83EA56DCE03EA64076303CEDDD
fincoin 3A8E0270F2D5D6128DC4C77B5656C0ADB5379C11    1624DE6220E82D7F4126AC9881C9C06A3EB33A293926DC15F4EE1B59EAD9339546F8ACB237


更改設(shè)定文件 (modify config files)

因為我們要在本地跑兩個節(jié)點,所以缺省的設(shè)定會有端口沖突锌唾,因此需要更改其中一個節(jié)點的設(shè)定锄码。

Because we will be running two nodes on the local machine, in order to avoid port conflicts, we will change the port settings for one node.

  • 端口設(shè)定更改 (change ports)
$ cd /opt/data/cosmos/fabcoin/config
$ cp config.toml config.toml.orig
$ cat config.toml.orig | sed -e 's/466/467/g' > config.toml
$ diff config.toml config.toml.orig 
8c8
< proxy_app = "tcp://127.0.0.1:46758"
---
> proxy_app = "tcp://127.0.0.1:46658"
54c54
< laddr = "tcp://0.0.0.0:46757"
---
> laddr = "tcp://0.0.0.0:46657"
67c67
< laddr = "tcp://0.0.0.0:46756"
---
> laddr = "tcp://0.0.0.0:46656"

  • 更改fabcoin節(jié)點的名稱(編輯/opt/data/cosmos/fabcoin/config/config.toml文件) (change default node name in file /opt/data/cosmos/fabcoin/config/config.toml)
# A custom human readable name for this node
moniker = "fabnode"
  • 更改fincoin節(jié)點的名稱(編輯/opt/data/cosmos/fincoin/config/config.toml文件) (change default node name in file /opt/data/cosmos/fincoin/config/config.toml)
# A custom human readable name for this node
moniker = "finnode"

finfab-chain區(qū)塊鏈上初始創(chuàng)世紀交易 (initiate genesis transactions on the finfab-chain blockchain)

$ cd /opt/data/cosmos

$ cp -a fabcoin/config/gentx/. fincoin/config/gentx/

$ cp -a fincoin/config/gentx/. fabcoin/config/gentx/

$ gaiad init --gen-txs --home=/opt/data/cosmos/fabcoin --chain-id=finfab-chain
{
  "chain_id": "finfab-chain",
  "node_id": "fc93204300fedd2076d9ec82bf7be589b30ec923",
  "app_message": null
}

$ gaiad init --gen-txs --home=/opt/data/cosmos/fincoin --chain-id=finfab-chain
{
  "chain_id": "finfab-chain",
  "node_id": "c519ca2cc2257eb62a95a61c45268ade1ee35d59",
  "app_message": null
}

運行節(jié)點 (run the blockchain nodes)

可以用兩種方式跑節(jié)點,一種直接從IDE里啟動晌涕,再者就是從命令行滋捶。

There are two ways we can run the nodes, either from the IDE or from the command line.

  • IDE (GoLand) 啟動 (run from GoLand IDE)


  • 命令行 (run from command line)

$ gaiad start --home=/opt/data/cosmos/fabcoin
$ gaiad start --home=/opt/data/cosmos/fincoin

賬戶確認 (verify accounts)

fabcoin賬戶擁有1000個fabcoinTokenfincoin賬戶擁有1000個fincoinToken余黎。

fabcoin account has 1000 fabcoinToken重窟,fincoin account has 1000 fincoinToken

$ gaiacli validatorset
{"block_height":17,"validators":[{"address":"6084207D042C1B35C631A279F2B3AA9DE404CD83","pub_key":{"type":"AC26791624DE60","value":"hNwHCN3J/FSa5nCJDgikkSh3znhv9ZrRZUU+kkvw1Uc="},"voting_power":100,"accum":-100},{"address":"D7F2FD3FC1535920EC695125613F08C53C569C7A","pub_key":{"type":"AC26791624DE60","value":"R3l0Y86zKYhaKnqliVu/sQInGUiYB/8AXNbp1hAsE7k="},"voting_power":100,"accum":100}]}

$ gaiacli keys list
NAME:   ADDRESS:                    PUBKEY:
fabcoin FB983823EC3A541193E61DBF1DAF8CFF4C90F02E    1624DE6220C6EEE1CCD437A5214499631559379D64023B1C83EA56DCE03EA64076303CEDDD
fincoin 3A8E0270F2D5D6128DC4C77B5656C0ADB5379C11    1624DE6220E82D7F4126AC9881C9C06A3EB33A293926DC15F4EE1B59EAD9339546F8ACB237

$ gaiacli account FB983823EC3A541193E61DBF1DAF8CFF4C90F02E
{
  "type": "6C54F73C9F2E08",
  "value": {
    "address": "FB983823EC3A541193E61DBF1DAF8CFF4C90F02E",
    "coins": [
      {
        "denom": "fabcoinToken",
        "amount": 1000
      },
      {
        "denom": "steak",
        "amount": 50
      }
    ],
    "public_key": null,
    "sequence": 0
  }
}

$ gaiacli account 3A8E0270F2D5D6128DC4C77B5656C0ADB5379C11
{
  "type": "6C54F73C9F2E08",
  "value": {
    "address": "3A8E0270F2D5D6128DC4C77B5656C0ADB5379C11",
    "coins": [
      {
        "denom": "fincoinToken",
        "amount": 1000
      },
      {
        "denom": "steak",
        "amount": 50
      }
    ],
    "public_key": null,
    "sequence": 0
  }
}


通證交易 (token transfer)

  • fabcoin轉(zhuǎn)100個通證給fincoin (默認的賬戶密碼是1234567890) (100 tokens transferred from fabcoin account to fincoin account, default password is 1234567890)
$ gaiacli send --amount=100fabcoinToken --to=3A8E0270F2D5D6128DC4C77B5656C0ADB5379C11 --name=fabcoin --chain-id=finfab-chain
Defaulting to next sequence number: 0
Password to sign with 'fabcoin':
Committed at block 339. Hash: 2F169D62F07FCF2EBDF33AA95599178BFC43D83C
  • 交易確認 (transaction confirmation)
$ gaiacli account FB983823EC3A541193E61DBF1DAF8CFF4C90F02E
{
  "type": "6C54F73C9F2E08",
  "value": {
    "address": "FB983823EC3A541193E61DBF1DAF8CFF4C90F02E",
    "coins": [
      {
        "denom": "fabcoinToken",
        "amount": 900
      },
      {
        "denom": "steak",
        "amount": 50
      }
    ],
    "public_key": {
      "type": "AC26791624DE60",
      "value": "xu7hzNQ3pSFEmWMVWTedZAI7HIPqVtzgPqZAdjA87d0="
    },
    "sequence": 1
  }
}

$ gaiacli account 3A8E0270F2D5D6128DC4C77B5656C0ADB5379C11
{
  "type": "6C54F73C9F2E08",
  "value": {
    "address": "3A8E0270F2D5D6128DC4C77B5656C0ADB5379C11",
    "coins": [
      {
        "denom": "fabcoinToken",
        "amount": 100
      },
      {
        "denom": "fincoinToken",
        "amount": 1000
      },
      {
        "denom": "steak",
        "amount": 50
      }
    ],
    "public_key": null,
    "sequence": 0
  }
}

fabcoin賬戶擁有900個fabcoinToken惧财,fincoin賬戶擁有100個fabcoinToken和1000個fincoinToken巡扇。

Now fabcoin account has 900 fabcoinTokenfincoin account has 100 fabcoinToken and 1000 fincoinToken垮衷。


參考 (Reference)

http://cosmos-sdk.readthedocs.io/en/develop/index.html
https://github.com/cosmos/testnets

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厅翔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子帘靡,更是在濱河造成了極大的恐慌知给,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件描姚,死亡現(xiàn)場離奇詭異涩赢,居然都是意外死亡,警方通過查閱死者的電腦和手機轩勘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門筒扒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绊寻,你說我怎么就攤上這事花墩⌒” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵冰蘑,是天一觀的道長和泌。 經(jīng)常有香客問我,道長祠肥,這世上最難降的妖魔是什么武氓? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮仇箱,結(jié)果婚禮上县恕,老公的妹妹穿的比我還像新娘。我一直安慰自己剂桥,他們只是感情好忠烛,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著权逗,像睡著了一般美尸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旬迹,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天火惊,我揣著相機與錄音,去河邊找鬼奔垦。 笑死屹耐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椿猎。 我是一名探鬼主播惶岭,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼犯眠!你這毒婦竟也來了按灶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筐咧,失蹤者是張志新(化名)和其女友劉穎鸯旁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體量蕊,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡铺罢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了残炮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韭赘。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖势就,靈堂內(nèi)的尸體忽然破棺而出泉瞻,到底是詐尸還是另有隱情脉漏,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布袖牙,位于F島的核電站侧巨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贼陶。R本人自食惡果不足惜刃泡,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一巧娱、第九天 我趴在偏房一處隱蔽的房頂上張望碉怔。 院中可真熱鬧,春花似錦禁添、人聲如沸撮胧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芹啥。三九已至,卻和暖如春铺峭,著一層夾襖步出監(jiān)牢的瞬間墓怀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工卫键, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留傀履,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓莉炉,卻偏偏與公主長得像钓账,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子絮宁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,332評論 0 10
  • 2017.8.29梆暮。無為,焦點解決第46天绍昂。古代諺語云:牙痛不是病啦粹,疼起來要了命。從數(shù)天前感冒起窘游,到現(xiàn)在的有小痛到...
    無為wyw閱讀 290評論 0 0
  • 天一熱唠椭,總能看見一眾小仙女,巴巴跪求安利防水防汗防暈染的眼線筆张峰。自己做功課搜泪蔫?茫茫筆海,要動腦經(jīng)又有選擇恐懼癥感覺...
    五月桃夭閱讀 129評論 0 0
  • 故鄉(xiāng)喘批,是一曲不老的民謠 曲調(diào)悠揚撩荣,淺吟低唱 故鄉(xiāng)铣揉,是一杯陳年佳釀 醇厚飄香,辣喉暖腸 故鄉(xiāng)餐曹,是一抹心靈的惆悵 深夜...
    遠方孤雁閱讀 142評論 2 5
  • 對現(xiàn)代人來說,生命的意義饱狂,早就從身體里抽干曹步。僅存的是對空虛感格外的恐懼,和與之俱來的無所事事休讳。我們偶爾安靜下來讲婚,總...
    南風(fēng)沫夏的寫字臺閱讀 1,379評論 12 16