EOS 스마트 계약 사례 분석 (하)

이번 에는 eosio. token 스마트 계약 의 마지막 파일 인 abi 파일 을 소개 합 니 다.ABI 는 애플 리 케 이 션 바 이 너 리 인터페이스, 중국어 이름 '애플 리 케 이 션 바 이 너 리 인터페이스' 로 말 그대로 인터페이스 파일 로 스마트 계약 과 상부 애플 리 케 이 션 간 데이터 교환 형식 을 묘사 했다.abi 파일 형식 은 JSON 과 유사 하고 가 독성 이 좋 으 며 스마트 계약 엔지니어 와 상부 응용 엔지니어 간 의 업무 연결 에 유리 합 니 다.eosio. token. abi 파일 주소:https://github.com/EOSIO/eos/blob/master/contracts/eosio.token/eosio.token.abi
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  대신 하 다  namericardian_clauses
이 가도 조항 과 관련 된 일부 EOS 는 아직 공식 적 으로 개발 중이 다.
다음으로 이동:https://blog.csdn.net/yuanfangyuan_block/article/details/80403329

좋은 웹페이지 즐겨찾기