Solidity - Panduan Gaya

Style Guide membantu menjaga konsistensi tata letak kode dan membuat kode lebih mudah dibaca. Berikut adalah praktik terbaik berikut saat menulis kontrak dengan Solidity.

Tata Letak Kode

  • Indentation- Gunakan 4 spasi sebagai ganti tab untuk mempertahankan tingkat indentasi. Hindari mencampur spasi dengan tab.

  • Two Blank Lines Rule - Gunakan 2 baris kosong antara dua definisi kontrak.

pragma solidity ^0.5.0;

contract LedgerBalance {
   //...
}
contract Updater {
   //...
}
  • One Blank Line Rule- Gunakan 1 baris kosong antara dua fungsi. Dalam kasus hanya deklarasi, tidak perlu memiliki baris kosong.

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 - Satu baris tidak boleh melewati 79 karakter sehingga pembaca dapat dengan mudah mengurai kode.

  • Wrapping rules- Argumen pertama berada di baris baru tanpa membuka tanda kurung. Gunakan inden tunggal per argumen. Elemen pemutusan); harus menjadi yang terakhir.

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 - Pengkodean UTF-8 atau ASCII sebaiknya digunakan.

  • Imports - Pernyataan impor harus ditempatkan di bagian atas file tepat setelah deklarasi pragma.

  • Order of Functions - Fungsi harus dikelompokkan sesuai visibilitasnya.

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 - Hindari spasi langsung di dalam tanda kurung, tanda kurung, atau tanda kurung.

  • Control structures- Braces harus terbuka pada baris yang sama dengan deklarasi. Tutup baris mereka sendiri dengan mempertahankan lekukan yang sama. Gunakan spasi dengan kurung kurawal buka.

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- Gunakan aturan di atas untuk kawat gigi. Selalu tambahkan label visibilitas. Label visibilitas harus diutamakan sebelum pengubah kustom apa pun.

function kill() public onlyowner {
   selfdestruct(owner);
}
  • Mappings - Hindari spasi putih saat mendeklarasikan variabel pemetaan.

mapping(uint => uint) map;
mapping(address => bool) registeredAddresses;
mapping(uint => mapping(bool => Data[])) public data;
mapping(uint => mapping(uint => s)) data;
  • Variable declaration - Hindari spasi saat mendeklarasikan variabel array.

uint[] x;  // not unit [] x;
  • String declaration - Gunakan tanda kutip ganda untuk mendeklarasikan string, bukan tanda kutip tunggal.

str = "foo";
str = "Hamlet says, 'To be or not to be...'";

Urutan Tata Letak

Elemen harus diatur dalam urutan berikut.

  • Pernyataan Pragma

  • Pernyataan impor

  • Interfaces

  • Libraries

  • Contracts

Di dalam Interfaces, library atau kontrak pesanan harus seperti -

  • Ketik deklarasi

  • Variabel status

  • Events

  • Functions

Konvensi penamaan

  • Kontrak dan Perpustakaan harus diberi nama menggunakan CapWords Style. Misalnya, SmartContract, Owner dll.

  • Nama kontrak dan Perpustakaan harus sesuai dengan nama file mereka.

  • Jika ada beberapa kontrak / pustaka dalam satu file, gunakan nama kontrak / pustaka inti.

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 {
   //...
}
  • Nama Struct

    - Gunakan CapWords Style seperti SmartCoin.

  • Nama Acara

    - Gunakan CapWords Style seperti Deposit, AfterTransfer.

  • Nama Fungsi

    - Gunakan gaya mixedCase seperti inisiateSupply.

  • Variabel Lokal dan Negara Bagian

    - Gunakan MixedCase Style seperti creatorAddress, supply.

  • Konstanta

    - Gunakan semua huruf kapital dengan garis bawah untuk memisahkan kata-kata seperti MAX_BLOCKS.

  • Nama Pengubah

    - Gunakan Style mixCase seperti onlyAfter.

  • Nama Enum

    - Gunakan CapWords Style seperti TokenGroup.