1. Интелигентни договори за лични финансиEthereum: Съвети за работа с данни в солидност
Ethereum за манекени

От Майкъл Соломон

Солидността е най-популярният език за писане на интелигентни договори на Ethereum. Солидността беше предложена от Gavin Wood през август 2014 г. Въпреки че това не е единственият език, който можете да използвате за писане на интелигентни договори, той е най-популярният език за писане на интелигентни договори, които се изпълняват в Ethereum. Той се радва на солидна подкрепа от Ethereum общността и е разработен от екипа на проекта Ethereum Solidity.

Solidity е проектиран да бъде подобен на JavaScript и е повлиян от няколко други популярни езика за програмиране, включително C ++ и Python. Целта на Solidity е да предостави език, познат на разработчиците на уеб приложения, но насочен към разработване на интелигентни договори. Solidity не е предназначен не за език с общо предназначение, а за поддържане на специфични блокчейн операции с код, който се изпълнява в EVM.

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

Тъй като интелигентните договори работят на всички възли, Solidity трябва да наложи детерминизъм, тоест резултатите трябва да са еднакви за всички възли, които изпълняват вашия смарт код на код с един и същи вход. Ако погледнете документацията за Solidity, няма да намерите произволна () функция. Този пропуск е специално в подкрепа на детерминизма на Солидността. Кодът ви се стартира първо от възела, който минимира нов блок, но след това всички възли проверяват блока и изпълняват кода, за да гарантират, че те не получават различен резултат.

В много отношения Solidity е подобен на другите езици за програмиране. Най-големите разлики са в начина на изпълнение на програмите и как Solidity се справя с данните. Обърнете внимание, че Solidity работи с данни само в EVM или блокчейна.

Твърдостта не взаимодейства много с външния свят, но е възможно. Солидността подкрепя концепцията за оракул, който е надежден източник на информация от външния свят.

Обаждането на оракул е лесно. Един проблем е възможността да се доверите на оракула. Друг проблем е справянето с данни на oracle, които могат да връщат различни данни всеки път, когато бъдат извикани. Преди да използвате каквито и да било оракули, трябва да сте сигурни, че източникът на данни е надежден и последователен. Обичайно е оракулите да връщат данни и някакво доказателство за автентичност.

Концепцията за доверие по отношение на оракулите е просто разширение на доверието в блокчейн. Не забравяйте, че технологията на blockchain предоставя надеждна книга на данни в среда на надеждни мрежови възли. Тъй като доверието е такова основополагащо свойство на blockchain, не е изненадващо, че доверието в оракул е важна грижа.

Солидността е конкретна за това къде можете да съхранявате данни. Като цяло дефинирате два типа променливи в Solidity: променливи състояния и локални променливи. Вие дефинирате променливи състояния в секцията на договора и тези променливи са достъпни навсякъде в интелигентния договор. Тези променливи съхраняват състоянието на вашия интелигентен договор, като запазват стойностите в блок на blockchain. Дефинирате локални променливи вътре във функциите. Локалните променливи не запазват стойностите си между извиквания на функции. Тези стойности не се съхраняват в блокчейна и отминават, когато функцията приключи.

Твърдостта определя три места за съхранение на данни:

  • Стек: където Solidity съхранява локални прости променливи стойности, дефинирани във функциите. Памет: Област памет на всеки EVM, която Solidity използва за съхраняване на временни стойности. Стойностите, съхранявани тук, се изтриват между извикванията на функции. Съхранение: Там, където се намират променливи на състоянието, дефинирани в интелигентен договор. Тези променливи състояния се намират в секцията с данни за интелигентни договори на блокчейна.

Променливото място за съхранение е един от по-объркващите аспекти на Solidity. Езикът на Solidity няма ключова дума за стека, но има ключови думи за памет и съхранение. Solidity използва свои собствени настройки по подразбиране, в зависимост от това къде определяте променливи и как ги използвате, но можете да отмените някои от тези настройки по подразбиране и също така да използвате ключовите думи, за да промените как Solidity третира променливите.

Ето няколко правила, които помагат да се изяснят нещата, когато се научите за съхраняване на данни в Solidity:

  • Променливите на състоянието са съхранение по подразбиране (стойностите се съхраняват в blockchain). Локалните променливи във функциите са памет по подразбиране (стойностите се съхраняват временно в паметта). Структурите се съхраняват по подразбиране (стойностите се съхраняват в blockchain).

Solidity може да обработва различни видове данни и предоставя различни видове променливи за обработка на всеки тип. Когато дефинирате променливи, трябва да посочите типа данни на променливата. Типът данни казва на Solidity колко място да отделите за стойността, която ще съхранявате в променливата и как да обработвате данните. Следващата таблица изброява типовете данни, които Solidity поддържа.

Тъй като вашите интелигентни договори стават по-сложни, вероятно ще трябва да представяте по-сложни типове данни. Например, може да искате да определите тип физически адрес, който съдържа няколко части информация, включително адрес на улица, град, щат и пощенски код.

Може също да се наложи да съхранявате таблици или списъци с данни. Солидността ви позволява да създавате собствени структури от данни с комплексния тип данни. Можете също така да определите масиви, които съхраняват групи от подобни елементи от данни. Масивите на солидността могат да бъдат групи от прости типове данни или групи структури.

Ето един интелигентен договор, който демонстрира някои от простите типове данни на Solidity. В този пример използвате само променливи на състоянието, което означава, че пишете в blockchain. Определянето на всички ваши променливи като променливи състояния не е добра идея, освен ако не искате да съхранявате данни завинаги. Данните, съхранявани в blockchain, изискват скъпи операции и не трябва да се използват, освен ако не трябва постоянно да съхранявате данните си. Засега ще използвате променливи на състоянието.

Отворете VS код за проекта myProject:

За да отворите VS код в проекта myProject, отворете командния ред на Windows или PowerShell (моят фаворит) и използвайте командата cd, за да отидете в директорията на вашия проект (myProject.) От тук просто въведете следната команда и натиснете Enter:

код.

След това въведете следния код или изтеглете файловете на проекта Ethereum от Dummies.

плътност на прагмата 0.4.24;
/ *
* @ типове данни за солидност
* @author Майкъл Соломон
* @notice Просто интелигентен договор за демонстриране на прости типове данни, налични в Solidity
*
* /
DataTypes на договора {
uint x = 9;
int i = -68;
uint8 j = 17;
bool isEthereumCool = true;
собственик на адреса = msg.sender; // Ефириум адрес на подателя на съобщението
bytes32 bMsg = "здравей";
string sMsg = "здравей";
функция getStateVariables () публичен изглед връща (uint, int, uint8, bool, адрес, байтове32, низ) {
връщане (x, i, j, isEthereumCool, owner, bMsg, sMsg);
}
} <

Преди да можете да разгърнете и тествате новия си смарт договор, трябва да го добавите към скрипта за миграция на JavaScript. Във VS Code отворете файла 2_contracts_migrations.js в директорията Migrations. След това добавете двата реда с коментари, така че файлът ви да изглежда така:

var HelloWorld = artifacts.require ("HelloWorld");
var DataTypes = artifacts.require ("DataTypes"); // Добавяне на този ред
module.exports = функция (дистрибутор) {
deployer.deploy (HelloWorld);
implemener.deploy (DataTypes); // Добавяне на този ред
};

Не забравяйте да запазите файла си, след като добавите новия текст!

Ето стъпките, които можете да използвате, за да разгърнете и тествате новия си интелигентен договор:

  1. Уверете се, че имате Ganache работи. Във VS код щракнете или докоснете раздела Терминал, въведете следното и натиснете Enter: разгръщане на трюфели - нулиране Въведете конзола за трюфели и натиснете Enter. В прозореца на конзолата на Truffle въведете следното и натиснете Enter: DataTypes.deployed (). След това (функция (екземпляр) {return instance.getStateVariables ()});

Следващото изображение показва стойностите, които вашият нов интелигентен договор връща. Трюфелът показва възвръщаемите стойности по интересен начин. Числата се връщат като обекти на BigNumber. Можете да извиквате функции в библиотеката на BigNumber, за да ги преобразувате, но засега просто четете стойностите директно.

За числово върнатите стойности първата стойност, s: е знакът на числото, а третата стойност, c: е неподписаната стойност, която функцията връща. Също така имайте предвид, че стойностите на адреса и байтовете32 са в шестнадесетичен формат.

Интелигентен договор на Ethereum