Commit 5f765317 authored by Peter Cheng's avatar Peter Cheng

修改說明文件

parent b774d3ca
# eosio-ipfs
EOSIO + IPFS 私鏈快速生成器
## 資料夾結構
## 必須套件
本系統透過Docker與Docker-Compose生成環境,請先設置好EOSIO + IPFS
## EOSIO 私鏈架設流程
1. 進入容器
```
docker exec -it nodeos bash
```
2. 新增錢包
```
cleos wallet create --file ~/wallet.passwd
```
3. 開啟錢包
```
cleos wallet open
```
4. 查看目前己開啟錢包
```
cleos wallet list
```
5. 解鎖錢包,密碼在~/wallet.passwd檔案中
```
cleos wallet unlock
```
6. 匯入設定檔中私鑰,私鑰在/mnt/dev/config/config.ini中,裡面的signature-provider,例如我這邊私鑰是5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
```
cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
```
7. 新增二把含以上的公鑰,等等新增會員時要用到
```
cleos wallet create_key
```
8. 查看可用的公私鑰
```
cleos wallet private_keys
```
9. 新增會員帳號
```
cleos create account eosio [會員帳號] [會員公鑰]
```
10. 查看會員可用資源
```
cleos get account [會員帳號]
```
## 撰寫 Hello World 智能合約
1. Hello World
```
#include <eosio/eosio.hpp>
using namespace eosio;
class [[eosio::contract]] helloworld : public contract {
public:
using contract::contract;
[[eosio::action]]
void hi(name user) {
print("Hi! ", user, " Hello World!!!");
}
};
```
2. 編譯智能合約
```
eosio-cpp -abigen -o [智能合約所在資料夾]/helloworld.wasm [智能合約所在資料夾]/helloworld.cpp
```
3. 查看可用公鑰
```
cleos wallet keys
```
4. 新增帳號發布智能合約,EOS當中,一個帳號只能發佈一份智能合約
```
cleos create account eosio [會員帳號] [會員公鑰] -p eosio@active
```
5. 發佈智能合約
```
cleos set contract [智能合約名稱] [智能合約在屬資料夾] -p [會員帳號]@active
```
6. 調用智能合約,調用智能合約與上合約的不能同一人
```
cleos push action [智能合約名稱] [調用的 Action] '[[代入參數]]' -p [會員帳號]@active
```
## 撰寫資料長期儲存智能合約
1. 上傳打卡鐘資料
```
#include <eosio/eosio.hpp>
using namespace eosio;
class [[eosio::contract("punchclock")]] punchclock : public eosio::contract {
public:
punchclock(name receiver, name code, datastream<const char*> ds): contract(receiver, code, ds) {}
[[eosio::action]] //新增資料
void add(std::string punchTime, std::string doorNo, std::string cardNo, std::string identify, name user) {
require_auth(user);
punchListIndex lists(get_self(), get_first_receiver().value);
lists.emplace(user, [&](auto& row) {
row.id = lists.available_primary_key();
row.creater = user.value;
row.punchtime = punchTime;
row.doorno = doorNo;
row.cardno = cardNo;
row.identify = identify;
});
}
[[eosio::action]] //刪除資料
void remove(uint64_t id, name user) {
require_auth(user);
punchListIndex lists(get_self(), get_first_receiver().value);
auto iterator = lists.find(id);
check(iterator != lists.end(), "Record does not exist");
lists.erase(iterator);
}
[[eosio::action]]
void get(std::string identify, name user) {
require_auth(user);
punchListIndex lists(get_self(), get_first_receiver().value);
auto iterator = lists.begin();
while(iterator != lists.end()) {
if (identify == iterator->identify) {
print(iterator->identify);
}
}
}
private:
struct [[eosio::table]] punchList { //punchList資料表
uint64_t id;
uint64_t creater;
std::string punchtime;
std::string doorno;
std::string cardno;
std::string identify;
uint64_t primary_key() const { return id; }
uint64_t get_secondary_1() const { return creater; }
};
typedef eosio::multi_index<"punchclock"_n, punchList,
indexed_by<"bycreater"_n, const_mem_fun<punchList, uint64_t, &punchList::get_secondary_1>>
> punchListIndex;
};
```
2. 調用智能合約
```
cleos push action punchclock add '["2019-06-08 11:28:00", "A01", "ABCDEFG", "00001", "bob"]' -p bob@active
```
3. 查看線上資料庫
```
root@a9e45804cee8:~/contracts# cleos get table [會員帳號] [上鏈的會員帳號] [資料表名]
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment