첫 번째 스마트 계약을 작성하는 방법은 무엇입니까?



스마트 계약 개발의 기본 사항을 배우고 첫 번째 스마트 계약 작성을 시작하십시오. 스마트 계약을 테스트하는 방법도 알게됩니다.

에서 , 스마트 계약이 무엇인지, 다양한 스마트 계약 언어 및 스마트 계약 개발 환경을 설정하는 방법에 대해 배웠습니다. 이 기사에서는 첫 번째 스마트 계약을 구축하는 방법을 배웁니다. 나는 사용할 것이다스마트 계약을 개발하고 테스트하기 위해 IDE를 리믹스합니다.

아래 주제는이 스마트 계약 개발 튜토리얼에서 다룹니다.





스마트 계약 구축

이 블로그 시리즈의 일부로 간단한 구매 주문 스마트 계약이 개발됩니다. 이 시리즈가 진행되고 새로운 개념의 견고성 프로그래밍 언어가 도입됨에 따라 구매 주문 스마트 계약이 발전하고 개선 될 것입니다.



스마트 계약의 구조

본질적으로 Solidity 스마트 계약은 다음의 모음입니다.

  • 데이터 — 계약의 현재 상태를 유지합니다.
  • 함수 – 계약 상태를 전환하는 논리를 적용합니다.

Solidity 스마트 계약은 표준 구조를 따릅니다. 스마트 계약은 다음 문장으로 시작됩니다.



Pragma 지시문

'pragma'키워드를 사용하여 특정 컴파일러 기능 또는 검사를 활성화 할 수 있습니다. 아래 문장은 소스 파일 (스마트 계약)이 0.4.0 이전의 컴파일러 및 0.6.0 이후의 컴파일러 버전으로 컴파일되지 않음을 정의합니다. 이 선언은 새 컴파일러 버전이 도입 될 때 의도하지 않은 동작이 도입되지 않도록합니다.

pragma 견고성> = 0.4.0<=0.6.0 

계약 선언

계약은 키워드 'contract'를 사용하여 선언됩니다. 이것은 'PurchaseOrder'라는 이름으로 식별되는 빈 계약을 선언합니다.

계약 구매 주문 {}

계약에 관련 데이터 저장

모든 계약 또는 일반적인 용어로 모든 프로그램은 일부 데이터를 저장해야 할 수 있습니다. 프로그램에 데이터를 추가하면 유연성이 향상됩니다. 프로그램의 하드 코딩 된 값에서 사용자 제공 값으로 이동하는 것은 중요한 기능입니다. 변수를 사용하면 데이터를 저장하고, 데이터에 레이블을 지정하고, 데이터를 검색하고, 데이터를 조작 할 수 있습니다.

스마트 계약 개발 : 변수 소개

견고 함에서 변수는 두 가지 유형입니다

  1. 값 유형 : 이러한 유형의 변수는 값으로 전달됩니다. 즉, 함수 인수 또는 할당으로 사용될 때 항상 복사됩니다. 예 : 정수, 부울 주소 등
  2. 참조 유형 : 이러한 유형의 변수는 복잡한 유형이며 참조로 전달됩니다. 이러한 변수는 256 비트에 맞지 않으며 복사하는 데 비용이 많이 들기 때문에 신중하게 관리해야합니다.

스마트 계약에 데이터 추가

계약에 데이터 변수를 추가해 보겠습니다. 모든 구매 주문에 대해 연관된 제품 수량이 있어야합니다. 데이터 유형 정수 또는 숫자가 될 변수 product_quantity를 추가하겠습니다.

자바가 있습니다

지금 소개하는 변수는 부호없는 정수이며 uint256으로 표시됩니다. 여기서 256은 256 비트 저장소를 나타냅니다.

  • U- 서명되지 않은 (이 유형은 양의 정수와 음의 정수가 아닌 양의 정수만 나타낼 수 있음을 의미)
  • INT – 정수
  • 256 – 256 비트 크기
  • 할당 할 수있는 uint256 최소값은 0입니다.
  • 할당 할 수있는 uint256의 최대 값은 2 ^ 256-1 [매우 큰 수]입니다.

제품 수량은 양의 값일 뿐이며 현재 가정에서는 제품 수량에 대해 매우 큰 값을 제공 할 것입니다.

데이터 과학에 대한 간단한 소개

선언 된 'product_quantity'변수는 계약 상태의 일부이므로 계약 공간에 유지되거나 저장됩니다. 현재이 변수의 기본값은 0입니다.

계약 구매 주문 {uint256 product_quantity}

생성자 정의

컨트랙트가 배포 될 때 생성자가 호출됩니다. 생성자는 일부 값으로 계약을 초기화합니다. 현재 시나리오에서는 계약이 배포 될 때 제품 수량이 100으로 설정됩니다. 매개 변수화 된 생성자는 변수를 전달하고 전달 된 값을 사용하여 product_quantity를 초기화하여 만들 수도 있습니다.

여기서 주목해야 할 요점은 생성자와 관련된 액세스 수정 자 'public'입니다. Public 키워드는 누구나이 기능에 액세스 할 수 있도록 지정하며 이는 제한된 기능이 아닙니다.

constructor () public {product_quantity = 100}

기능 추가

이제 프로그램을 대화 형으로 만드는 기능을 추가해 보겠습니다. 기능은 프로그램에 추가 할 수있는 제어 기능입니다. 모든 함수 앞에는 키워드 함수가 있습니다. 전반적으로 이것이 함수 선언의 모습입니다.' 함수 ”.

기능 가져 오기

모든 프로그램의 가장 일반적인 요구 사항 중 하나는 저장된 값을 읽는 것입니다. 다음 계약에서는 'product_quantity'값을 읽어야합니다. 이 기능을 제공하기 위해 읽기 기능 또는 가져 오기 기능이 추가됩니다. 이 함수에서 우리는 저장된 값을 조작하지 않고 저장된 값을 검색합니다.

이제 get 함수 (get_quantity)를 분석하겠습니다.

아니. 예어
하나 get_quantity (){전달 된 매개 변수 없음}
2 공공의{누구나 기능에 액세스 할 수 있음}
전망{함수는 계약 상태를 읽기만하고 계약 상태를 변경하지 않으므로보기}
4 uint256 유형의 변수를 반환합니다. {함수가 반환하는 내용을 정의했습니다.}
function get_quantity () public view returns (uint256) {return product_quantity}

세터 기능

데이터 읽기가 필요하며 마지막 섹션에서 완료했지만 대부분의 시나리오에는 데이터 쓰기 / 업데이트 기능도 필요합니다. 이 특정 기능은 setter 함수를 추가하여 제공됩니다. 이 함수는 입력 매개 변수의 형식으로 사용자로부터 값을받습니다. 사용자가 함수에 제공 한 값을 사용하여 변수“product_quantity”의 값을 작성 / 업데이트합니다.

이제 set 함수 (update_quantity)를 분석하겠습니다.

제품 수량 값 업데이트 기능 추가

아니. 예어
하나 update_quantity (uint256 값){uint256 유형의 매개 변수 값이 전달됨}
2 공공의{누구나 기능에 액세스 할 수 있음}
상태가 함수에 의해 업데이트되므로 필요하지 않습니다.
4 uint256 유형의 변수를 반환합니다 (함수에서 반환되는 내용을 정의 함).
function update_quantity (uint256 value) public {product_quantity = product_quantity + value}

이 모든 것을 함께 연결하면 전체 계약이 어떻게 생겼는지 알 수 있습니다.

pragma 견고성> = 0.4.0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

스마트 계약 배포

스마트 계약을 테스트 할 시간입니다. 이 스마트 계약을 테스트하기 위해 우리는 온라인 IDE 리믹스 .

Remix는 이더 리움 스마트 계약 . Remix는 완전히 브라우저 기반입니다. Remix는 스마트 계약을 작성할 수있는 온라인 IDE (통합 개발 환경)를 제공합니다. Remix는 온라인 견고성 컴파일러 기능을 제공합니다. Remix IDE의 스마트 계약은 특정 컴파일러 버전을 사용하여 원활하게 컴파일 할 수 있습니다.

Remix는 또한 스마트 계약을 빠르게 테스트 할 수있는 기능을 제공합니다.

Remix는 로컬 컴퓨터에 설치하지 않고도 스마트 계약 개발을 시작하고 스마트 계약을 단위 테스트 할 수있는 완전한 도구 세트를 제공합니다. 개발자는 인프라에 대해 걱정하는 대신 스마트 계약 작성에만 집중해야하므로 견고 함으로 시작하는 데 매우 유용합니다.

Remix IDE를 사용하면 스마트 계약 개발을 시작하는 데 필요한 브라우저와 인터넷 연결 만 있으면됩니다. 스마트 계약에 대한 아이디어의 빠른 개발, 테스트 및 검증.

Remix는 최근 UI를 업그레이드했습니다.

Remix-UI-Smart-Contracts-Edureka

위 이미지에서 강조 표시된 파일 아이콘을 클릭하면 파일 탐색기가 열립니다.

  1. 더하기 아이콘을 클릭하면 새 파일이 생성되고 파일 이름은 PurchaseOrder.sol입니다.
  2. 그러면 PurchaseOrder.sol이라는 빈 파일이 생성되고이 파일을 클릭하여 엽니 다.
  3. PurchaseOrder.sol에 전체 계약을 복사하여 붙여 넣습니다.
  4. 두 번째 아이콘을 클릭하면 파일 아이콘 바로 아래의 왼쪽 메뉴에서 solidity 컴파일러 옵션이 나타납니다.
  5. 컴파일러 레이블에서 컴파일러 버전을 선택합니다. 현재 선택된 버전은 0.5.8입니다.
  6. 컴파일러 버전을 선택한 후“Compile PurchaseOrder.sol”을 클릭합니다. 이것은 스마트 계약을 컴파일합니다.

7. 스마트 계약이 성공적으로 컴파일되면 'Compilation Details'버튼을 클릭하면 다음 세부 정보가 표시됩니다. 편집 후, 두 가지 주요 정보를 사용할 수 있습니다.

    • ABI – 애플리케이션 바이너리 인터페이스. 이것은 메소드의 메타 데이터와 함께 스마트 계약에 노출 된 모든 메소드를 자세히 설명하는 json 파일입니다. 이에 대한 자세한 내용은 후속 블로그에서 설명합니다.
    • 바이트 코드– EVM (Ethereum 가상 머신) 운영 코드, 스마트 계약 로직은 컴파일시 바이트 코드로 변환됩니다.

8. 스마트 계약을 테스트하려면 스마트 계약을 배포해야합니다. 스마트 계약을 배포하려면 컴파일 아이콘 아래 왼쪽 메뉴의 다음 아이콘을 클릭하십시오. 다음 화면이 나타납니다. 스마트 계약을 테스트하려면 스마트 계약을 배포해야합니다. 스마트 계약을 배포하려면 왼쪽 메뉴에서 컴파일 아이콘 아래에있는 다음 아이콘을 클릭하십시오. 다음 화면이 나타납니다.

배포 옵션

배포 화면은 몇 가지 선택 사항을 제공하므로 하나씩 살펴 보겠습니다.

  • 환경 : 이는 Amazon, Flipkart, Newegg (모두 온라인 소매 업체)에서 랩톱을 구입하는 것과 유사한 옵션으로 생각할 수 있습니다. 요구 사항에 따라 구입하려는 곳을 선택합니다. 마찬가지로 Remix의 경우 스마트 계약을 배포하고 스마트 계약을 테스트 할 수있는 옵션이 있습니다. 환경 레이블 옆에있는 드롭 다운은 세 가지 선택 사항을 제공합니다.
    • JavaScript VM – 로컬 Ethereum 단일 노드가 브라우저 메모리에서 스핀 업되고 트랜잭션 (배포, 호출 기능)에 사용할 수있는 5 개의 사전 자금 지원 테스트 계정을 제공합니다.
    • Injected Web3 Provide – 이것은 MetaMask에 의존합니다. Metamask는 웹 애플리케이션이 스마트 계약과 상호 작용할 수 있도록하는 중개인 또는 중개인과 같습니다. 메타 마스크는 신원을 관리하고 이더 리움 네트워크로 보낼 트랜잭션에 서명하는 기능을 제공합니다.rd파티는 스마트 계약이 배포 될 블록 체인 네트워크를 결정하는 데 도움을줍니다.
    • Web3 Provider – 로컬 Ethereum 노드를 실행 중이고 RPC 엔드 포인트를 사용할 수있는 경우이 옵션을 사용할 수 있습니다. 스마트 계약은 로컬 이더 리움 노드에 배포됩니다.
  • 계정 :이 정보는 선택한 환경에 따라 채워집니다. 예를 들면. JavaScript VM은 5 개의 사전 자금 지원 테스트 계정을 제공합니다. Web3 제공 업체 및 Injected Web3의 경우 사전 자금 지원 테스트 계정을 제공하지 않습니다.
  • 가스 한도 : 개시자가 모든 거래에 대해 지출하고자하는 최대 가스량을 정의합니다. 무한 루프 상태의 경우 계정의 모든 자금을 고갈시키고 무한 루프로부터 보호하는 곳입니다.
  • 값 : 스마트 계약을 배포하는 동안 전송하는 데 필요할 수있는 값입니다. 이것은 선택적 값입니다.

계약을 배포하려면 JavaScript VM 옵션을 선택하고 계정 드롭 다운에서 첫 번째 계정을 선택하고 계정 잔액 (100 에테르)을 기록해 둡니다.

나타나는 스마트 계약 이름이 PurchaseOrder인지 확인하고 배포를 클릭합니다. 일어날 주요 조치

  1. 계정 잔액이 100 이더에서 99.999999 이더로 변경되면 공제되는 금액은 스마트 계약을 배포하기위한 거래 비용입니다.
  2. 배포 된 계약에 따라 스마트 계약을위한 새 타일이 표시되며,이 타일은 또한 다음과 같은 새 스마트 계약의 주소를 제공합니다 (0x692a70d2e424a56d2c6c27aa97d1a86395877b3a)
  3. 콘솔 창에 다음 정보가 나타납니다.
    1. 트랜잭션 해시 – 계약 배포를 고유하게 식별합니다.
    2. 거래 비용
    3. 계약 주소

배포 된 계약과 상호 작용

  1. 배포 된 계약에서 다음 두 가지 상호 작용 방법을 사용할 수 있습니다. update_quantity 및 get_quantity.
  2. 이러한 상호 작용 방법은 모두 '구매 주문'계약에 정의 된 공개 방법입니다.
  3. 수량 업데이트 'update_quantity'메소드에는 입력 매개 변수가 필요하므로 입력 상자가 필요합니다.
  4. 수량 가져 오기 'get_quantity'메소드는 product_quantity의 값을 검색합니다.
  5. get_quantity가 호출되고 생성자에서 초기화 된 반환 값 100이 표시되면 어떻게되는지 확인해 보겠습니다. 이로 인해 거래가 발생하지 않습니다.
  6. update_quantity를 호출하고 30을 입력으로 제공하겠습니다. 이로 인해 거래가 발생합니다.

간단히 말해서, 계약 상태에 대한 쓰기 작업 (즉, 계약 변수 변경)을 발생시키는 모든 작업은 트랜잭션으로 이어집니다.

계약 상태 만 읽는 작업은 거래를 일으키지 않습니다.

스마트 계약 개발 결론

이것으로 우리는 견고 함의 표면을 긁어 모으는 첫 번째 스마트 계약을 막 만들었습니다. 우리는 스마트 계약을 배포하는 것부터 거래를 시작하는 것까지 스마트 계약을 테스트하는 데 필요한 것을 방금 보았습니다.

C ++ 범위 연산자

스마트 계약 개발 시리즈의 연속 인 다음 블로그에서는 견고성 기본 사항에 대해 자세히 살펴보고 스마트 계약 배포에 대해 더 자세히 알아볼 것입니다.

이것으로 스마트 계약 개발 블로그. 이 블로그를 즐겁게 읽고 유익한 정보를 얻으 셨기를 바랍니다.

나는f 스마트 계약을 배우고 블록 체인 도메인에서 경력을 쌓고 이더 리움 프로그래밍에 대한 전문 지식을 얻고 라이브 온라인에 등록하기를 원합니다. 여기에는 학습 기간 내내 안내하는 연중 무휴 지원이 함께 제공됩니다.

질문이 있으십니까? '스마트 계약 개발'의 댓글 섹션에 언급 해 주시면 빠른 시일 내에 답변 드리겠습니다.성.