예제와 함께 스마트 계약을 배포하는 초보자 가이드

이 가이드는 Javascript를 사용하여 Arweave에 스마트 계약을 작성하고 배포하는 방법을 설명하려고 합니다.

목차


  • Fundamentals
  • PreRequisites
  • Introduction
  • Setting up inital state
  • Updating state
  • Deployment
  • Interacting with the contract
  • Summary

  • 기초

    스마트 계약이란 무엇입니까?



    스마트 계약은 실제 계약을 디지털 방식으로 대체합니다. 일단 코드화되고 체인에 푸시되면 변경할 수 없으므로 변경할 수 없습니다!

    하나를 작성하는 방법?



    많은 네트워크가 있습니다. 내 계약을 Arweave 에 배포했습니다. 다른 많은 네트워크와 달리 Arweave의 스마트 계약은 JavaScript로 작성할 수 있습니다. 하나를 작성하고 배포하는 프로세스는 상당히 간단합니다.

    전제 조건

  • Install Arweave CLI
  • Install Smartweave CLI
  • 가져오기 Arweave wallet 또는 Finnie wallet

  • 계속 진행하기 전에 위의 단계를 완료하십시오.

    소개

    There are two steps to deploying Smart Contracts on Arweave once the prerequisites are completed.

  • Write the smart contracts Go through the Contract writing guide Arweave 팀. 여기에는 기본을 바로 세워야 하는 Hello World의 예가 포함되어 있습니다.

  • CLI를 통해 배포
    계약 파일이 준비되면. CLI를 통해 배포하려면 이전에 생성했어야 하는 Arweave/Finnie Wallet의 개인 키를 내보내야 합니다. 다음은 CLI Usage guide 입니다.

  • 초기 상태 설정

    Please go through the introduction section and explore the attached resources before moving ahead.

    Example Contract description : Set up a Decentralised marketplace where people can donate to crowdsource fundraiser listings.

    Time to build our Crowdsource App 🥳🥳🥳

    In order to do that, we need two contracts to make it work.

    A Collection contract that would contain all the information regarding the listing in its
    state

    {
      "owner": "6Jfg5shIvbAcgoD04mOppSxL6LAqx6IfjL0JexxpmFQ",
      "name": "Tabs over Spaces",
      "description":"This is my first petition. Please vote this petition to make spaces illegal",
      "funds":{
        "raised":0,
        "goal":100,
        "records":{
    
        }
      }  
    }
    


    위에 생성된 수집 계약에 대한 참조를 포함하는 상위 크라우드소싱 계약state

    {
        "owner": "6Jfg5shIvbAcgoD04mOppSxL6LAqx6IfjL0JexxpmFQ",
        "name": "CrowdSource | PeopleHelpPeople",
        "collections":{}
      }
    


    상태 업데이트 중

    There are two operations that could happen:

    1. Users enlist a new crowdsource collection
    2. Users donate funds to the collection

    NOTE: These actions are basic and preliminary. Since I didnt have much time during the hackathon, this was all I could build. But obviously it could be expanded to make the system more usable and robust.

    징수 계약 등록



    Parent Contract의 enlist 기능을 살펴보겠습니다.

    export function handle(state, action) {
    
        if (action.input.function === 'enlist') {
            if (typeof action.input.listingId === 'undefined') {
                throw new ContractError(`PetitionId cant be null`)
            }
            if (state.collections.hasOwnProperty(action.input.listingId)) {
                throw new ContractError(`PetitionId already exists`)
            }
            state.collections[action.input.listingId] = 1
            return { state }
        }
    
        throw new ContractError('Invalid input')
    }
    


    enlist 함수는 먼저 필수 검사를 수행한 다음 상태의 컬렉션 개체에 대한 참조를 추가합니다. 이것은 체인의 모든 크라우드소싱 계약을 추적하는 수단으로 사용됩니다.

    징수 계약을 등록한 후 상위 계약 상태는 다음과 같아야 합니다.

    {
      "owner": "6Jfg5shIvbAcgoD04mOppSxL6LAqx6IfjL0JexxpmFQ",
      "name": "CrowdSource | PeopleHelpPeople",
      "collections": {
        "Ji6MP-Wt_LYk6yaTsxEnhlpbRpAu08248PUTxnp2qOU": 1
      }
    }
    


    징수 계약에 기부



    컬렉션이 등록되면 사용자는 컬렉션에 자금을 이체할 수 있습니다. 모든 지갑 서비스를 사용하여 토큰을 전송하십시오. 그러나 소유자 필드에 올바른 주소가 있는지 확인하십시오.

    Since I used Finnie wallet, I put my Finnie address inside the owner field.



    여기는 Collection Contract

    export function handle(state, action) {
    
        if (action.input.function === 'donate') {
            if (typeof action.input.donorId === 'undefined') {
                throw new ContractError(`DonorId cant be null`)
            }
            if (typeof action.input.amount === 'undefined') {
                throw new ContractError(`amount cant be null`)
            }
    
            if (typeof action.input.amount !== 'number') {
                throw new ContractError(`amount must be a number`)
            }
    
            state.funds.records[action.input.donorId] = action.input.amount;
            state.funds.raised += action.input.amount;
            return { state }
        }
        throw new ContractError('Invalid input')
    }
    


    필수 확인을 수행한 후 계약 상태가 기부자 지불 ID(주소)와 기부한 금액으로 업데이트됩니다.

    The default currency is assumed to be KOII. Again a place for improvement. To support various currencies, currency field could be added to the record.



    이것은 사용자가 일부 자금을 기부한 후 수집 계약의 모양입니다.

    {
      "owner": "6Jfg5shIvbAcgoD04mOppSxL6LAqx6IfjL0JexxpmFQ",
      "name": "Tabs over Spaces",
      "description": "This is my first petition. Please vote this petition to make spaces illegal",
      "funds": {
        "raised": 1.2109999999999999,
        "goal": 100,
        "records": {
          "Ji6MP-Wt_LYk6yaTsxEnhlpbRpAu0824": 1.21,
          "6Jfg5shIvbAcgoD04mOppSxL6LAqx6IfjL0JexxpmFQ": 0.001
        }
      }
    }
    


    전개

    To deploy the contracts, use the Smartweave create command:

    smartweave create [SRC LOCATION] [INITIAL STATE FILE] --key-file [YOUR KEYFILE]
    

    It takes around 10-15 minutes for the contract to be deployed. Note that you would have to spend some AR in order to deploy the contract.
    Once the create command completes, the CLI will output a unique transaction ID for the transaction. This ID is essential to proceed forward.

    To check the status of the transaction

    arweave status [CONTRACT TXID]
    

    To read the state of the contract

    smartweave read [CONTRACT TXID]
    

    For a web GUI experience, check out Viewblock.io. Its a handy website to check all the information about your contracts state, tags and transactions.



    계약과 상호 작용

    It is time to send payloads to interact with the contract i.e. update the state. We would be using the enlist and donate functions that we set up earlier on the contracts.

    To interact with the transaction:

    smartweave write [CONTRACT TXID] --key-file [YOUR KEYFILE] \
      --input "[CONTRACT INPUT STRING HERE]"
    

    For enlisting a contract

    smartweave write [Parent Crowdsource Contract TXID] --key-file [YOUR KEYFILE] --input "{"function":"enlist","listingId":"<Collection contract TXID>"}"
    

    For donating tokens to a collection

    smartweave write [Collection Contract] --key-file [YOUR KEYFILE] --input '{"function":"donate","donorId":"<Donor wallet address>","amount":<number of tokens>}'
    

    요약

    Congratulations 🥳🥳🥳

    Hope you liked reading through the article. To summarise the learnings, you should have understood:

    1. What are smart contracts
    2. How to write and deploy one on Arweave
    3. How to Interact with them
    Read about my project I built for the hackathon if you're interested below 🙂

    보너스 팁



    이 모든 작업은 CLI를 통해 수행되지만 실제 애플리케이션으로 확장하기 위한 것입니다. Arweave SDK 및 API가 필요합니다.
    즐거운 탐험 😉

    내 프로젝트 정보

    Its called People Help People, the origin of the name comes from the idea of a society where people are not dependent on middle men or central systems to help each other. One can find more information about the Aim and Goals on the Pitch Deck .

    블록체인 기반 프로젝트입니다. 그것에는 두 부분이 있습니다. 스마트 계약 및 웹 클라이언트 인터페이스.

    이 프로젝트는 현재 두 개의 프로토타입으로 구성되어 있습니다.
  • Petitions
  • Crowdsource

  • 이 두 프로토타입은 모두 중앙 시스템의 개입을 물리친다는 PHP의 아이디어를 계승합니다. 따라서 나는 기사에서 그들 중 하나만을 다루었습니다. 스마트 계약이 작동하는 방식과 작성 방법에 대한 기본 기본 사항을 배우고 나면 이 두 가지 아이디어에 생명을 불어넣는 것은 순조로운 일이었습니다.

    Devfolio 제출 링크: https://devfolio.co/submissions/people-help-people-a3c8
    GitHub Repo 링크: https://github.com/HarishTeens/PeopleHelpPeople

    I had to struggle a lot to walk through the right steps in order to learn this. So I tried my best to make the learning smooth for a beginner. Please share your feedbacks in the comments.



    운동에 참여하세요



    이 운동에 참여하는 데 관심이 있으시면 Twitter에서 저에게 dm을 보내주시면 GitHub의 조직People Help People에 추가할 수 있습니다. 아주 최근에 만든 조직이라 현재는 비어 있는 것 같습니다. 하지만 분명히 앞으로 작업할 계획입니다 ✨

    트위터에서 나를 팔로우

    좋은 웹페이지 즐겨찾기