자판기 스마트 컨트랙트 개발

7431 단어

자판기 소개



자판기는 Solidity의 기본 사항을 시작하는 데 흥미로운 것입니다. 그래서 우리는 Lizy Vending Machine을 위한 스마트 계약을 구축하는 데 도움이 되는 코드를 Solidity로 작성할 것입니다!

이 제목에서는 Solidity 프로그래밍 언어를 사용하여 Lizy의 자판기를 만드는 데 필요한 모든 것을 배웁니다. 이 타이틀 내에서 이론적인 것뿐만 아니라 스마트 계약 판매를 통해 많은 실제 경험/기술 능력을 얻게 될 것입니다.

• 자판기 소개
• 변수
• 기능 및 기능 가시성 유형(비공개) 등
• 잔액 기능 가져오기
• 구매 기능
• 재입고 기능
• 스마트 계약 컴파일
• 스마트 계약 배포
• 결론

자판기는 현금, 신용카드 등의 결제수단을 기계에 투입하거나 그 밖의 방법으로 소비자에게 과자, 음료수, 담배, 복권 등의 물품을 제공하는 자동화된 기계를 말한다.

Solidity 언어용 IDE인 Remix로 이동하여 시작하겠습니다. 블록체인용 스마트 계약을 작성하는 데 사용됩니다. ERC-20 토큰 구현 코딩 측면에서 여섯 가지 기본 코딩 기능은 다음과 같습니다.
구입
재입고

리믹스(IDE)



Remix는 브라우저에서 바로 Solidity 계약을 작성하는 데 도움이 되는 강력한 오픈 소스 도구입니다. JavaScript로 작성된 Remix는 브라우저와 로컬에서의 사용을 모두 지원합니다. Remix는 또한 스마트 계약 등의 테스트, 디버깅 및 배포를 지원합니다. 리믹스 개요 환경에 액세스하려면 아래 URL을 입력하십시오.

https://remix.ethereum.org/


라이선스 식별자



Solidity 0.8.11에는 SPDX 라이선스 식별자가 도입되어 개발자가 계약에서 사용하는 라이선스를 지정할 수 있습니다. (예: OpenZeppelin 계약은 MIT 라이선스를 사용합니다).

SPDX 라이선스 식별자는 계약 파일 상단에 추가해야 합니다. (OpenZeppelin 계약 ERC20.sol의 예 참조)

계약서 상단에 다음 식별자를 추가해야 합니다(예: MIT 라이선스 사용).

//SPDX-License-Identifier: MIT


라이선스는 다음 중 하나여야 합니다.

⚠️ If the license identifier isn’t included in the contract file the compiler will now show a warning.

❗ If there are multiple license identifiers in the contract file the compiler will now show an error.

We now need to write the version of solidity that we are going to be using:

pragma solidity ^0.8.15;

The next step is to create a contract. In Solidity, we write a smart contract by typing the keyword contract followed by the name of the contract. Let us proceed by naming our contract Vending Machine. So, write:

contract VendingMachine{

        }

We will write our further code in the curly brackets as all the functions and variables would be a part of it. Next, we define the variables that will be a part of the contract that is:

1: Address public owner;
2: mapping(address => uint) public lizyBalances;

Here, address refers to the wallet address of the owner and mapping refers to a keyword where we can map one type of variable to be associated with another.

So, lizyBalances is a mapping where number of lizy's will be associated with the address. Next, we go on to create a constructor that will be automatically executed when deployment will occur on the Ethereum Blockchain.

 constructor(){
            owner = msg.sender;
            lizyBalances[address(this)] = 1000;
            }

The creation of first function is getBalance(). It is used to get the balance of lizy's that are left in the Vending Machine.

lizyBalances[address(this)] represents the balance of the lizy's that are associated with the current Ethereum account.


            function getBalance() public view returns (uint) {

                return lizyBalances[address(this)];

                }

Function that is next is called restock(). It is restricted only to the owner and thus, the keyword comes as require.
The lizyBalances gets updated when the amount is entered by the owner to be incremented.


        function restock(uint amount) public {

            require(msg.sender == owner, "Only owner can restock the lizy!");
            lizyBalances[address(this)]+= amount;

            }

The last function is the purchase function that actually helps the person or the customer to purchase a lizy's.

The price for one lizy's that we entered is 0.5 ETH. Thus, the msg.value should be equal to the amount multiplied by 0.5 ETH.

Also, the Vending machine should have the number of lizy's entered by the customer. When both of these requirements are fulfilled, then the lizyBalances of this address gets deducted by the amount.

Also, the msg.sender’s lizyBalances will get updated by the number of lizy's purchased.


            function purchase(uint amount) public payable{

                require(msg.value >= amount * 0.5 ether, "You must pay at least 0.5 ether per lizy");

                require(lizyBalances[address(this)] >= amount, "OOPS! Not enough lizy");

                lizyBalances[address(this)] -= amount;

                lizyBalances[address(msg.sender)] += amount;

                }

Finally, the code is done. Now we, proceed to compile it. The Remix automatically compiles the code and shows if there is some error or not. Then, we go ahead to Deploy the code.

To deploy our smart contract we are going to using the Injected Provider-Metamask environment.

Make sure that we are in Deploy and Run Transactions tab. Then the environment to be selected is Injected Provider-Metamask. The contract should be our Vending Machine contract.

Deploy it now, and you will get the deployed contract as follows. Also, now whenever the customer has purchased the lizy's, the lizyBalances gets updated when the function is called.



Estimated gas fee 0.00138873 RopstenETH


아래는 계약서 리지 자판기 주소입니다

0x18855a8cd0dda8d56a7cd82211b1be7c7433da09


결과: ropsten.etherscan.io



기타 정보는 다음과 같습니다.

Transaction Hash:
0x19adcb673ca2e8fcb60649f354a6a24c330ba4538c6d0cf41b758e0925ca6fc8

Block: 12621525 

Transaction Fee: 0.00138872500388843 Ether ($0.0


결론.

자판기 스마트 계약에는 세 가지 기능(getBalance, 구매 및 재입고)이 포함되어 있습니다. 속도를 높일 수 있는 빠른 가이드였기를 바랍니다.

당신이 기사를 즐겼기를 바랍니다! 질문이나 의견이 있으시면 언제든지 아래에 남겨 주시거나 다음을 통해 저에게 연락하십시오.

좋은 웹페이지 즐겨찾기