etherscan의 계약 검증에는 라이센스 지정이 필수이며 주석을 지울 수 있습니다.
7933 단어 이더리움Blockchain
소개
etherscan에서 소스 코드의 검증 동작을 공부했습니다. 그 노트입니다.
Truffle과 OpenZeppelin을 사용하여 계약을 만들었습니다.
소스는 여기에 있습니다.
계약 배포 1
이런 계약을 배포했습니다.
pragma solidity >=0.4.21 <0.7.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
contract PToken is ERC20, ERC20Detailed {
constructor(uint256 initialSupply) ERC20Detailed("PToken", "PTN", 18) public {
_mint(msg.sender, initialSupply);
}
}
그럼 검증으로 진행합니다.
etherscan에 업로드할 수 있는 파일 형식은 4개

Standard-Json-Input은 무엇입니까?
truffle로 컴파일 한 후에 할 수있는 json이 아닙니다.
build/contracts/PToken.json
업로드 해 보았습니다.
Error! Unable to generate Contract ByteCode and ABI (General Exception, unable to get compiled [bytecode])
오류! 계약의 ByteCode 및 ABI를 생성할 수 없습니다(일반 예외, 컴파일된 [bytecode]를 검색할 수 없음)

이런 형식인 것 같다
그 json의 metadata에있는 사람은 그것처럼 보이지만 좋지 않았습니다.
이

parse 해보기

오류

Unable to process the standard-input-json you uploaded. ErrCode: Only literal contents of the source file, Source using URLS are not supported
업로드한 standard-input-json을 처리할 수 없습니다. ErrCode: 소스 파일의 리터럴 콘텐츠만 URL을 사용하는 소스는 지원되지 않습니다.
다음과 같이 sources[<file_name>].urls
가 아니라 sources[<file_name>].content
이어야 한다는 것이라고 생각했다.

truffle-flattener를 사용하여 Single file을 지정하면
이것을 사용하면 가져 오기 또는 거슬러 올라가서 하나의 파일로 결합됩니다.
안전하게 검증 할 수있었습니다.

계약 탭에 소스 코드가 표시됨

계약 배포 2
1과 정확히 동일한 Solidity를 배포했습니다.
etherscan에서 이미 검증되었습니다.
이전 녀석과 같은 바이트 코드이기 때문에

계약 배포 3
이름을 한 글자 바꿨다. PToken
에서 LToken
로 했다. 생성자 인수는 변경되지 않았습니다.
pragma solidity >=0.4.21 <0.7.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
contract LToken is ERC20, ERC20Detailed {
constructor(uint256 initialSupply) ERC20Detailed("PToken", "PTN", 18) public {
_mint(msg.sender, initialSupply);
}
}
계약의 이름을 바꾸면 동일하지 않습니다.
etherscan 화면이 아직 검증이 아닙니다.

검증에서는 라이센스가 필수 항목, 코멘트의 유무는 검증에 영향을 미치지 않는다
라이센스는 필수 항목

License를 None으로 지정

댓글 지우고 업로드

License None으로 표시됩니다. License의 표기가 없는 계약은 옛 시대의 것일지도 모른다.

결론
계약 검증은 Single file을 선택한다.
정확히 동일한 바이트 코드 계약은 자동으로 검증됩니다.
License의 지정은 필수.
계약의 코멘트는 지워도 문제 없다.
Reference
이 문제에 관하여(etherscan의 계약 검증에는 라이센스 지정이 필수이며 주석을 지울 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/planethouki/items/a06426a2cf7025c478a0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pragma solidity >=0.4.21 <0.7.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
contract PToken is ERC20, ERC20Detailed {
constructor(uint256 initialSupply) ERC20Detailed("PToken", "PTN", 18) public {
_mint(msg.sender, initialSupply);
}
}
pragma solidity >=0.4.21 <0.7.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
contract LToken is ERC20, ERC20Detailed {
constructor(uint256 initialSupply) ERC20Detailed("PToken", "PTN", 18) public {
_mint(msg.sender, initialSupply);
}
}
계약 검증은 Single file을 선택한다.
정확히 동일한 바이트 코드 계약은 자동으로 검증됩니다.
License의 지정은 필수.
계약의 코멘트는 지워도 문제 없다.
Reference
이 문제에 관하여(etherscan의 계약 검증에는 라이센스 지정이 필수이며 주석을 지울 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/planethouki/items/a06426a2cf7025c478a0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)