EOS 스마트 계약 사례 분석 (하)
EOS 스마트 계약 abi 파일 은 5 부분 으로 구성 되 어 있 습 니 다.
{ "types":[...], //형식 을 정의 하 는 별명 "structs":[...], //각 유형의 데이터 구조 "actions":[...], //지능 계약 의 action "tables":[...], //데이터 구조 체 "ricardian_clauses":[...] //이 가도 조항
}
주: JSON 형식 은 주석 을 지원 하지 않 습 니 다. 위의 쌍 사선 은 모두 가 이해 하면 됩 니 다.actions - > structs - > tables - > structs - > types - > ricardianclauses 의 순 서 는 EOS 스마트 계약 abi 의 개발 방법 을 알 고 있 습 니 다.
actions
action 부분의 역할 은 스마트 계약 이 어떤 액 션 을 호출 할 수 있 는 지 설명 하 는 것 이다.아래 와 같다.
"actions": [{
"name": "transfer",
"type": "transfer",
"ricardian_contract": ""
},{
"name": "issue",
"type": "issue",
"ricardian_contract": ""
}, {
"name": "create",
"type": "create",
"ricardian_contract": ""
}
]
그 중에서 모든 name 은 action 의 이름 입 니 다. type 은 structs 에서 데이터 구 조 를 찾 습 니 다.ricardian_contract 는 이 가도 계약 으로 EOS 스마트 계약 에 방금 가입 되 었 으 며 공식 적 으로 는 아직 설명 하지 않 았 다.
structs
방금 세 개의 action 의 이름 만 밝 혔 습 니 다. 우 리 는 structs 에서 각 action 이 들 어 와 야 할 인 자 를 설명 해 야 합 니 다. 다음 과 같 습 니 다.
"structs": [{
"name": "transfer",
"base": "",
"fields": [
{"name":"from", "type":"account_name"},
{"name":"to", "type":"account_name"},
{"name":"quantity", "type":"asset"},
{"name":"memo", "type":"string"}
]
},{
"name": "create",
"base": "",
"fields": [
{"name":"issuer", "type":"account_name"},
{"name":"maximum_supply", "type":"asset"},
{"name":"can_freeze", "type":"uint8"},
{"name":"can_recall", "type":"uint8"},
{"name":"can_whitelist", "type":"uint8"}
]
},{
"name": "issue",
"base": "",
"fields": [
{"name":"to", "type":"account_name"},
{"name":"quantity", "type":"asset"},
{"name":"memo", "type":"string"}
]
}
]
EOS 시스템 은
actions
부분 적 type
,... 에 있다 structs
부분 적 으로 대응 하 는 데이터 구 조 를 찾 고 모든 데이터 구 조 를 찾 습 니 다. fields
매개 변수의 이름과 유형 을 보 여 줍 니 다.tables
tables
스마트 계약 에 필요 한 데이터 시트 이름과 데이터 시트 에 저 장 된 구조 체 이름 을 보 여 줍 니 다. "tables": [{
"name": "accounts",
"type": "account",
"index_type": "i64",
"key_names" : ["currency"],
"key_types" : ["uint64"]
},{
"name": "stat",
"type": "currency_stats",
"index_type": "i64",
"key_names" : ["currency"],
"key_types" : ["uint64"]
}
]
그 중의
type
데이터 시트 에 저 장 된 구조 체 이름 입 니 다.structs
왜 다시 돌아 와
structs
뿐만 아니 라 action
프로젝트 structs
상세 한 데이터 구 조 를 보 여 줍 니 다. 프로젝트 도 필요 해. "structs": [{
"name": "account",
"base": "",
"fields": [
{"name":"balance", "type":"asset"},
{"name":"frozen", "type":"uint8"},
{"name":"whitelist", "type":"uint8"}
]
},{
"name": "currency_stats",
"base": "",
"fields": [
{"name":"supply", "type":"asset"},
{"name":"max_supply", "type":"asset"},
{"name":"issuer", "type":"account_name"},
{"name":"can_freeze", "type":"uint8"},
{"name":"can_recall", "type":"uint8"},
{"name":"can_whitelist", "type":"uint8"},
{"name":"is_frozen", "type":"uint8"},
{"name":"enforce_whitelist", "type":"uint8"}
]
}
]
types
types 부분 은 유형의 별명 을 만 드 는 데 사 용 됩 니 다. 예 를 들 어 주 고 싶 은 것 입 니 다.
tables
형식 으로 별명 만 들 기:"types": [{
"new_type_name": "account_name",
"type": "name"
}
]
이렇게 하면 이 abi 파일 에서 사용 할 수 있 습 니 다.
account_name
대신 하 다 name
ricardian_clauses 이 가도 조항 과 관련 된 일부 EOS 는 아직 공식 적 으로 개발 중이 다.
다음으로 이동:https://blog.csdn.net/yuanfangyuan_block/article/details/80403329