Solidity-스타일 가이드
스타일 가이드는 코드 레이아웃을 일관되게 유지하고 코드를 더 읽기 쉽게 만드는 데 도움이됩니다. 다음은 Solidity와 계약을 작성할 때 따르는 모범 사례입니다.
코드 레이아웃
Indentation− 들여 쓰기 수준을 유지하려면 탭 대신 4 개의 공백을 사용하십시오. 탭과 공백을 혼합하지 마십시오.
Two Blank Lines Rule − 두 계약 정의 사이에 빈 줄 2 개를 사용합니다.
pragma solidity ^0.5.0;
contract LedgerBalance {
//...
}
contract Updater {
//...
}
One Blank Line Rule− 두 기능 사이에 빈 줄 1 개를 사용합니다. 선언 만하는 경우 빈 줄이 필요하지 않습니다.
pragma solidity ^0.5.0;
contract A {
function balance() public pure;
function account() public pure;
}
contract B is A {
function balance() public pure {
// ...
}
function account() public pure {
// ...
}
}
Maximum Line Length − 독자가 코드를 쉽게 구문 분석 할 수 있도록 한 줄이 79자를 넘지 않아야합니다.
Wrapping rules− 첫 번째 인수는 여는 괄호없이 새 줄에 있습니다. 인수 당 단일 들여 쓰기를 사용하십시오. 종료 요소); 마지막이어야합니다.
function_with_a_long_name(
longArgument1,
longArgument2,
longArgument3
);
variable = function_with_a_long_name(
longArgument1,
longArgument2,
longArgument3
);
event multipleArguments(
address sender,
address recipient,
uint256 publicKey,
uint256 amount,
bytes32[] options
);
MultipleArguments(
sender,
recipient,
publicKey,
amount,
options
);
Source Code Encoding − UTF-8 또는 ASCII 인코딩을 사용하는 것이 좋습니다.
Imports − import 문은 pragma 선언 바로 뒤에 파일 상단에 위치해야합니다.
Order of Functions − 기능은 가시성에 따라 그룹화되어야합니다.
pragma solidity ^0.5.0;
contract A {
constructor() public {
// ...
}
function() external {
// ...
}
// External functions
// ...
// External view functions
// ...
// External pure functions
// ...
// Public functions
// ...
// Internal functions
// ...
// Private functions
// ...
}
Avoid extra whitespaces − 괄호, 대괄호 또는 중괄호 바로 안에 공백을 사용하지 마십시오.
Control structures− 중괄호는 선언과 같은 줄에 열어야합니다. 동일한 들여 쓰기를 유지하면서 자체 줄에서 닫습니다. 여는 중괄호가있는 공간을 사용하십시오.
pragma solidity ^0.5.0;
contract Coin {
struct Bank {
address owner;
uint balance;
}
}
if (x < 3) {
x += 1;
} else if (x > 7) {
x -= 1;
} else {
x = 5;
}
if (x < 3)
x += 1;
else
x -= 1;
Function Declaration− 중괄호에는 위의 규칙을 사용하십시오. 항상 가시성 레이블을 추가하십시오. 사용자 지정 수정 자 앞에 가시성 레이블이 먼저 와야합니다.
function kill() public onlyowner {
selfdestruct(owner);
}
Mappings − 매핑 변수를 선언하는 동안 공백을 피하십시오.
mapping(uint => uint) map;
mapping(address => bool) registeredAddresses;
mapping(uint => mapping(bool => Data[])) public data;
mapping(uint => mapping(uint => s)) data;
Variable declaration − 배열 변수를 선언하는 동안 공백을 피하십시오.
uint[] x; // not unit [] x;
String declaration − 작은 따옴표 대신 큰 따옴표를 사용하여 문자열을 선언하십시오.
str = "foo";
str = "Hamlet says, 'To be or not to be...'";
레이아웃 순서
요소는 다음 순서로 레이아웃되어야합니다.
Pragma 문
수입 명세서
Interfaces
Libraries
Contracts
인터페이스, 라이브러리 또는 계약 내에서 순서는 다음과 같아야합니다.
유형 선언
상태 변수
Events
Functions
명명 규칙
계약 및 라이브러리는 CapWords 스타일을 사용하여 이름을 지정해야합니다. 예 : SmartContract, Owner 등
계약 및 라이브러리 이름은 파일 이름과 일치해야합니다.
하나의 파일에 여러 개의 계약 / 라이브러리가있는 경우 핵심 계약 / 라이브러리 이름을 사용하십시오.
Owned.sol
pragma solidity ^0.5.0;
// Owned.sol
contract Owned {
address public owner;
constructor() public {
owner = msg.sender;
}
modifier onlyOwner {
//....
}
function transferOwnership(address newOwner) public onlyOwner {
//...
}
}
Congress.sol
pragma solidity ^0.5.0;
// Congress.sol
import "./Owned.sol";
contract Congress is Owned, TokenRecipient {
//...
}
구조체 이름
− SmartCoin과 같은 CapWords 스타일을 사용하십시오.이벤트 이름
− Deposit, AfterTransfer와 같은 CapWords 스타일을 사용하십시오.기능 명
− initializeSupply와 같은 mixedCase 스타일을 사용합니다.지역 및 상태 변수
− creatorAddress, supply와 같은 mixedCase 스타일을 사용합니다.상수
− MAX_BLOCKS와 같은 단어를 구분하려면 밑줄과 함께 모두 대문자를 사용하십시오.수정 자 이름
− onlyAfter와 같이 mixCase 스타일을 사용합니다.열거 형 이름
− TokenGroup과 같은 CapWords Style을 사용합니다.