Soilidity란 무엇인지 읽어보십시오: 스마트 계약을 구현하기 위한 고급 프로그래밍 언어

첫 번째 레벨 제목
견고성이란 무엇입니까?
Solidity는 스마트 계약을 구현하기 위한 계약 지향 고급 프로그래밍 언어입니다. Solidity는 Ethereum Virtual Machine을 위해 설계되었습니다.
견고성 = = = 스마트 계약.
pragma solidity >=0.5.0 <0.6.0;
contract HelloWorld {
}
위의 코드에서 코드가 b/w 0.5에서 0.6까지의 모든 버전과 호환된다는 점을 고려하여 버전을 제공합니다. "HelloWorld"라는 계약도 생성했습니다.
첫 번째 레벨 제목
상태 변수 및 정수
contract Example {
// This will be stored permanently in the blockchain
uint myUnsignedInteger = 100;
string name = "vivek"
}
Uint 데이터 유형은 부호 없는 정수입니다. 음수가 아니어야 합니다.
첫 번째 레벨 제목
데이터 유형
값 유형:
Boolean(true/false), Integers(int/uint), Address(이더리움 주소의 크기), String, enum
참조 유형:
첫 번째 레벨 제목
Addition: x + y
Subtraction: x — y,
Multiplication: x * y
Division: x / y
Modulus / remainder: x % y (for example, 13 % 5 is 3, because if you divide 5 into 13, 3 is the remainder)
Exponential Operation uint x = 5 ** 2; // equal to 5² = 25
구조
첫 번째 레벨 제목
struct Person {
uint age;
string name;
정렬
정렬
데이터 모음을 배열이라고 합니다. 두 가지 유형: 고정 배열 및 동적 배열.
// Array with a fixed length of 2 elements:
uint[2] fixedArray;
// another fixed Array, can contain 5
strings: string[5] stringArray;
// a dynamic Array — has no fixed size, can keep growing:
uint[] dynamicArray;
구조체와 배열을 결합할 수 있습니다. 구조체를 만든 다음 구조체 배열을 만듭니다. Java와 같은 객체 지향 패러다임에서 객체와 객체 배열을 갖는 것과 같습니다.
pragma solidity >=0.5.0 <0.6.0;
contract StudentFactory {
struct student {
string name;
uint roll; } student[] public students; // creates an array named students of student type objects
첫 번째 레벨 제목
function eatHamburgers(string memory _name, uint _amount) public { }
함수 선언
값별 및 참조별
eatHamburgers(“vitalik”, 100);
첫 번째 레벨 제목
개인/공공 기능
function _eatHamburgers(string memory _name, uint _amount) private {
}
규칙에 따라 비공개 함수는 밑줄로 시작합니다.
내부/외부 키워드
텍스트
외부는 공개와 유사합니다. 이 함수는 이 함수를 선언한 컨트랙트를 제외한 모든 컨트랙트에서 호출할 수 있습니다.
첫 번째 레벨 제목
함수에서 반환
function sayHi() public view/pure returns (string memory) {
return “Hi”;
}
이러한 함수는 순수/보기로 표시할 수 있습니다. 전달된 데이터에 대한 액세스 권한이 없을 때 함수를 순수로 표시합니다. 함수가 데이터를 수정하지 않고 데이터를 보기만 하면 보기로 표시됩니다.
첫 번째 레벨 제목
이벤트
uint8 a = 5;
uint b = 6;
// line below throws an error because a*b returns a uint, not uint8:
uint8 c = a * b;
// we have to typecast b as a uint8 to make it work:
uint8 c = a * uint8(b);
이벤트
텍스트
// declare the event
event NotifyOnFrontend(uint x);
function add(uint _x, uint _y) public returns (uint) {
uint result = _x + _y;
//fire an event to let the frontend know the function was called
emit NotifyOnFrontend(result);
return result;
}
첫 번째 레벨 제목
YourContract.NotifyOnFrontend(function(error, result) {
// do something with result
})
지도
지도
mapping (address => uint) public accountBalance;
이것은 배열 및 구조와 같은 조직화된 데이터를 저장하는 또 다른 방법입니다.
이것은 블록체인에 여러 개체(데이터)를 저장하는 데 사용할 수 있습니다. 검사 예는 다음과 같습니다.
예:
contract Example {
struct UserInfo {
unit age; string dob;
}
mapping(string => UserInfo) allusers;
function setUserInfo(string _name, uint _age, string _dob) public {
allusers[_name].age = _age;
allusers[_name].dob = _dob;
}
function getUserInfo(string name) public view returns(uint, string) {
return (allusers[name].age, allusers[_name].dob);
}
}
예:
setuserInfo("Vivek",26, 25/05/1995) setuserInfo("Supu", 23, 01/09/1998)
이러한 값을 얻으려면 이름을 전달하면 됩니다.
getUserInfo("Vivek"); // 26 25/05/1995
getuserInfo("Supu"); // 24 01/09/1998
첫 번째 레벨 제목
이러한 변수는 msg.sender와 같은 모든 함수에서 사용할 수 있습니다. 우리가 작성하는 모든 Solidity 프로그램은 소유자가 호출해야 합니다. 보낸 사람의 주소는 msg.sender 전역 변수에 저장됩니다.
require
첫 번째 레벨 제목
function sayHi(string memory name) public returns (string memory) { /Compares if _name equals “Vivek” Throws an error and exits if not true. Solidity doesn’t have native string comparison, so we compare their keccak256 hashes to see if the strings are equaq /
require(keccak256(abi.encodePacked(name)) == keccak256(abi.encodePacked(“Vivek”)));
// If it’s true, proceed with the function:
return “Hi!”;
}
sayHi(“Vivek”) // executes successfully
sayHi(“Supu”) // throws an error
따라서 require는 함수를 실행하기 전에 특정 조건이 참인지 확인하는 데 매우 유용합니다.
계승하다
때로는 매우 긴 계약을 맺는 것보다 코드 논리를 여러 계약으로 분할하여 코드를 구성하는 것이 좋습니다.
contract Animal {
function catchphrase() public returns (string memory) {
return “Animal”;
}
} contract Cat is Animal {
function anotherCatchphrase() public returns (string memory) {
return “Cat is an Animal”;
}
}
import
첫 번째 레벨 제목
이것은 일반적으로 Solidity 프로젝트에서 코드베이스가 처리되는 기간입니다.
첫 번째 레벨 제목
저장소는 블록체인에 영구적으로 저장되는 변수를 의미합니다. 메모리 변수는 임시적이며 계약에 대한 외부 함수 호출 간에 삭제됩니다. 컴퓨터의 하드 드라이브 및 메모리와 같다고 생각하십시오.
첫 번째 레벨 제목
블록체인 네트워크에서 다른 계약과 상호 작용
이에 대해서는 별도의 글을 작성하겠습니다. 이제 짧게 유지하십시오.
contract GetNumber {
function getNum(uint _num) public returns(uint){
return _num;
}
다른 계약과 상호 작용하기 위해 객체와 유사한 인터페이스를 선언합니다. 계약을 만들고 그 안에 다른 계약에서 호출하거나 사용하려는 함수를 선언합니다. 함수는 뼈대에 불과하며 본체를 포함하지 않습니다.
contract NumberInterface {
function getNum(uint _num) public returns(uint);
}
계약이 있고 위의 getNum 함수를 사용하고 싶다고 가정합니다. 이를 위해 프로젝트에서 계약을 생성하고 getNum 함수 스켈레톤(함수 본문 없음)을 선언합니다.
계약이 이더리움에 배포된 후에는 변경할 수 없게 되어 수정할 수 없습니다. 계약에 배포된 초기 코드는 블록체인에 영원히 남습니다. 이것이 Solidity에서 보안이 중요한 이유 중 하나입니다. 계약 코드에 버그가 있으면 나중에 패치할 방법이 없습니다. 수정 사항이 있는 다른 스마트 계약 주소를 사용하기 시작하도록 사용자에게 알려야 합니다.
첫 번째 레벨 제목
기능 수정자
이는 다른 사용자가 계약을 위반하는 것을 방지하면서 DApp의 중요한 부분을 업데이트하는 데 도움이 됩니다. 내가 처리한 한 가지 사용 사례는 사용 사례를 실행하기 전에 명령문의 유효성을 검사하려는 경우입니다.
gas
사용자는 Ethereum 네트워크에서 계약을 실행하기 위해 가스 요금을 지불합니다. 가스는 에테르(이더리움의 통화)로 계산됩니다. 우리 기능의 총 가스 비용은 모든 개별 작업의 총 가스 비용과 같습니다.
첫 번째 레벨 제목
스토리지에 대해 자세히 알아보기
스토리지 메모리는 블록체인에 영구적으로 기록됩니다. 전 세계 수천 개의 노드는 이 데이터를 하드 드라이브에 저장해야 하며 블록체인이 성장함에 따라 이 데이터의 양은 시간이 지남에 따라 증가할 것입니다. 따라서 이를 수행하는 데는 대가가 따릅니다.
따라서 데이터가 영구적으로 저장되지 않도록 가급적 메모리 방식을 사용하여 비용을 절감하는 것이 좋습니다. 루프는 저장소를 사용하는 것보다 Solidity에서 더 저렴합니다. 따라서 가능한 한 for 루프에서 메모리를 사용하십시오. for 루프는 계산 비용이 더 많이 들기 때문에 Java, Python 등과 같은 언어에서 수행되는 작업과 정반대입니다.
첫 번째 레벨 제목
구문은 Javascript와 유사합니다.
for (uint i = 1; i <= 10; i++) { // body }
수식어에 대처
텍스트
결제 기능은 Solidity와 Ethereum을 멋지게 만드는 요소 중 하나입니다. 이 기능은 Ether를 받을 수 있는 특별한 유형의 기능입니다. 일반 웹 서버에서 API 함수를 호출할 때 함수를 호출하는 동시에 달러를 보낼 수 없으며 비트코인도 보낼 수 없습니다.
이것은 기능을 실행하기 위해 계약에 수수료를 지불하는 것과 같은 매우 흥미로운 논리를 허용합니다.
알아채다:
첫 번째 레벨 제목
토큰
따라서 기본적으로 토큰은 누가 얼마나 많은 토큰을 소유하고 있는지 기록하는 계약일 뿐이며, 해당 사용자가 토큰을 다른 주소로 전송할 수 있도록 하는 일부 기능입니다.
첫 번째 레벨 제목
Assert는 require와 유사하며 false인 경우 오류를 발생시킵니다. assert와 require의 차이점은 함수가 실패할 때 사용자의 남은 가스를 환불하는 반면 assert는 그렇지 않다는 것입니다.
Metamask
Chrome 및 Firefox용 브라우저 확장 프로그램으로 사용자는 이더리움 계정과 개인 키를 안전하게 관리하고 이 계정을 사용하여 Web3.js를 사용하는 웹사이트와 상호 작용할 수 있습니다.
첫 번째 레벨 제목
첫 번째 레벨 제목
Web3Js
텍스트
Source:https://medium.com/coinmonks/learn-all-about-solidity-ethereum-45d709c4de77


