ABI는 Application Binary Interface의 약자입니다.
soliditylang.org - abi-coder-pragma
pragma abicoder v1;
키워드를 사용하여 이전 버전처럼 동작하도록 선택할 수 있습니다.pragma experimantal ABIEncoderV2;
를 사용했지만 더 이상 사용되지 않으며 효과가 없습니다. 명시적으로 사용하려면 pragma abicoder v2;
를 대신 사용하세요사용 방법:
pragma abicoder v1;
키워드를 입력해야합니다.특징:
Sample Code
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
contract ABICoderV1Example {
struct Person {
string name;
uint age;
}
Person[] public people;
function addPerson(string memory name, uint age) public {
people.push(Person({name: name, age: age}));
}
function getPerson(
uint index
) public view returns (string memory name, uint age) {
require(index < people.length, "Index out of bounds");
name = people[index].name;
age = people[index].age;
}
// 이 함수는 외부에서 호출할 수 없습니다. 왜냐하면 ABI coder v1에서는 External 함수에서 구조체를 반환할 수 없기 때문입니다.
// function getPersonStruct(uint index) external view returns (Person memory) {
// require(index < people.length, "Index out of bounds");
// return people[index];
// }
}
사용 방법:
pragma abicoder v2;
키워드를 입력해야합니다.특징
Sample Code
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ABICoderV2Example {
struct Person {
string name;
uint age;
}
Person[] public people;
function addPerson(string memory name, uint age) public {
people.push(Person({name: name, age: age}));
}
function getPerson(uint index) public view returns (Person memory) {
require(index < people.length, "Index out of bounds");
return people[index];
}
}