Solidity

от Уикипедия, свободната енциклопедия
Solidity
Повлиян отJavaScript, C++, Eiffel, Python
Уебсайтgithub.com/ethereum/solidity

Solidity е обектно ориентиран език за програмиране на самоизпълняващи се договори за платформата Ethereum.

История[редактиране | редактиране на кода]

Езикът е предложен през август 2014 г. от Gavin Wood, а впоследствие получава развитие под ръководството на Christian Reitwiessner от екипа на Solidity като част от проекта Ethereum. Това е един от четирите езика (сред Serpent, LLL и Mutan), предназначен да преобразува в машинен код виртуалната машина Ethereum. Разпространява се с появата на технологията на блокчейн, по-специално в изграждането на интелигентни договори в мрежата на Ethereum.

Описание[редактиране | редактиране на кода]

Статически типизиран език за програмиране, подобен на JavaScript, предназначен за разработване на самоизпълняващи се договори, които се изпълняват на виртуалната машина Ethereum (EVM). Програмите се превеждат в машинен код на EVM. Позволява на разработчиците да създават автономни приложения, съдържащи бизнес логика, водещи до неотменяеми транзакционни блокчейн записи.

Използването на Wood на синтаксиса ECMAScript трябва да помогне за приемането на езика от уеб разработчиците. Въпреки това, за разлика от ECMAScript, езикът е получил статично типизиране на променливи и динамични типове връщане. В сравнение с езиците Serpent и Mutan, компилирани в един и същ машинен код, езикът има важни разлики. Поддържат се сложни променливи на договора, включително произволни картографирания и структури. Договорите поддържат наследяване, включително множествена и C3 линеаризация. Поддържа се двоичен интерфейс за програмиране (ABI), който има много безопасни за типа функции във всеки договор (по-късно се появи и в Serpent). Посочена е система за документиране на кода за обяснение от потребителя на последователността на обажданията, наречена Ethereum Natural Specification Format. Договорите се декларират в Solidity вместо обичайните класове. Има библиотеки за писане на интелигентни договори като: Open Zeppelin, Truffle. Библиотеките позволяват да се създаде собствена монета (токен) въз основа на готови шаблони, с всички спецификации (ERC20) и проверки за сигурност (библиотека safemath).

Договорите в Solidity могат да се наследяват един от друг. Това означава, че функциите и променливите на договора, от който се наследява, ще бъдат налични в договора, който наследява. В Solidity подобно на C ++ има множествено наследяване.

contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) allowed;
//
}
contract MintableToken is StandardToken, Ownable {

  event Mint(address indexed to, uint256 amount);

  event MintFinished();

  bool public mintingFinished = false;

  modifier canMint() {
    require(!mintingFinished);
    _;
  }
//  
}

Пример на програма на езика Solidity

contract GavCoin
{
  mapping(address=>uint) balances;
  uint constant totalCoins = 100000000000;

  /// Endows creator of contract with 1m GAV.
  function GavCoin(){
      balances[msg.sender] = totalCoins;
  }

  /// Send $((valueInmGAV / 1000).fixed(0,3)) GAV from the account of $(message.caller.address()), to an account accessible only by $(to.address()).
  function send(address to, uint256 valueInmGAV) {
    if (balances[msg.sender] >= valueInmGAV) {
      balances[to] += valueInmGAV;
      balances[msg.sender] -= valueInmGAV;
    }
  }

  /// getter function for the balance
  function balance(address who) constant returns (uint256 balanceInmGAV) {
    balanceInmGAV = balances[who];
  }

};