Ethereum ÐApps Programming Distilled — Part 2

비트 코인과 비교하여 이더 리움의 특별한 점은 무엇입니까? Solidity로 스마트 계약을 작성하는 방법과 그 제약과 해결 방법은 무엇입니까? 거래 비용은 얼마이며 가스 및 가스 가격은 얼마입니까? 그리고 마지막으로… 개발자는 어떻게 수익을 올릴 수 있습니까?

여러 부분으로 구성된 기사입니다. 다음은 다른 부분에 대한 링크입니다.

Ethereum의 특별한 점은 무엇입니까?

비트 코인은 기본적으로 주소에서 다른 주소로 디지털 화폐를 전송하는 것보다 더 복잡한 애플리케이션에 적합하지 않게 만드는 제한된 스크립팅 기능을 설계 상 그리고 안전 문제로 인해 가지고 있습니다. 이것이 비트 코인이 기반이되는 플랫폼이 아니라 대부분 “디지털 달러”인 이유입니다.

반면에 Ethereum은 개발자 친화적 인 Turing-complete를 사용하여 사용자 지정 스크립트 및 로직 (“스마트 계약”이라고 함)을 실행하기위한 플랫폼으로 처음에 설계되었습니다 o 상당한 유연성을 허용하는 Solidity라는 언어 (컴파일러가 씬 뒤에서 어셈블리와 같은 코드를 생성하지만이를 볼 필요는 없습니다.) 명확하게하자.이 언어는 다른 현대 언어 (Swift, Kotlin 또는 C #뿐만 아니라 JavaScript도 훨씬 더 강력 함)에 비해 여전히 원시 언어이며 많은 제약이 있습니다. 하지만 아마도 확장 될 것이고 지금도 무시할 수없는 로직에 사용될 수 있습니다.

이더 리움에는 두 가지 유형의 계정이 있습니다. 1) 사람이 소유하고 공개 / 키 쌍에 의해 제어되는 “외부 계정”(공개 키는 계정의 주소이고 개인 키는 거래에 디지털 서명하는 키입니다) . 2) “계약 계정”, 즉 계약 코드에 의해 제어되는 스마트 계약. 스마트 계약의 런타임 환경을 Ethereum Virtual Machine (EVM)이라고합니다.

공식 문서에서이 모든 것에 대해 자세히 읽어보세요. 놀랍도록 분명합니다.

예시

제약 / 제한 사항

실제로 위의 예 중 일부는 완전히 분산 된 방식으로 수행 할 수 없습니다. 그 이유는 현재 실제로 수행 할 수있는 작업이 제한되어 있고 예를 들어 타사와 같은 외부 리소스를 호출 할 수 없기 때문입니다. 외부 API 호출. 그리고 그것은 난수를 생성하는 것과 같은 단순한 일 (Solidity에서 생성 할 수 있지만 실제로는 무작위가 아니며 악의적 인 노드가 속일 수 있음) 또는 비행의 착륙 시간과 같은 외부 데이터를 검색하는 데 필요합니다. 통화 변환 환율, 기상 조건 등… 스마트 계약에서 일어나는 일을 결정할 수있는 모든 것. 현재 해결책은 “오라클”을 사용하는 것입니다.

오라클은 “짝수”를 높여 블록 체인 외부 세계에 데이터를 요청하는 스마트 계약입니다. 외부 서버에서 실행되는 리스너는이 이벤트를 가로 채 오라클이 일부 데이터 (예 : USD = & gt; ETH 전환율)를 원한다는 것을 이해하고 어떻게 든이 데이터를 검색 할 것입니다 (예 : 제공하는 일부 서비스에 대한 API 호출을 통해). 이 정보), 요청 된 정보를 전달하기 위해 스마트 계약으로 다시 전화합니다. 스마트 계약은 데이터를 내부 상태의 일부로 저장하고 블록 체인에서 실행되는 다른 계약에 사용할 수 있도록합니다. 물론 “인증 된”리스너 만이 요청 된 정보로 오라클의 스마트 계약을 호출 할 수 있습니다. 그 소유자는 스마트 계약을 처음 생성하고 배포 한 계정입니다. 이 전략은 오라클이 제공하는 데이터가 실제로 특정 외부 소스 (물론 처음부터 신뢰해야 함)에서 가져오고 변조 될 수 없도록합니다.

Solidity 언어는 어떻습니까?

Solidity는 Ethereum의 사실상의 표준 프로그래밍 언어입니다 (이전에는 Serpent와 Viper가 있었지만 전투에서졌습니다). 그것 :

나쁘지 않습니까? 그러나 여전히 매우 원시적이고 제한적입니다. 예 :

Soooo…이 모든 일이 끝나면 실제 코드를보고 싶을 것입니다. MessageStorage.sol 파일에 포함 된 내 앱의 스마트 계약 발췌를 따릅니다.이 파일에는 메시지 (여러 속성 포함)를 저장하고, ID별로 메시지를로드 및 반환하고, 특정 사용자 계정에 대한 모든 메시지 ID를 검색하는 기능이 있습니다. :

함수, 배열, 매핑 및 튜플이 어떻게 사용되는지 알 수 있으며, 이전에 코드를 작성한 적이 있다면 대부분 명확해야합니다. 솔리 디티와 스마트 계약에 특화된 몇 가지 사항은 설명 할 가치가 있습니다.

참고 : 지금까지주의를 기울이고 위의 코드를 살펴보면 이제 “이봐, 메시지는 계약에 로컬 인 배열에 저장됩니다. 어레이에서 하나의 항목 만 삭제하거나 재설정 할 수 없습니까? 하지만 블록 체인에 저장된 것이 영원히있을 거라고 말하지 않았나요? 거짓말 했어?”. 좋은 질문이지만 아니에요. 거짓말을 안 했어요 예, 어레이에서 메시지를 삭제할 수 있으며 그러면 계약의 현재 상태에서 메시지가 삭제됩니다. 그러나 누구도 과거 거래를 삭제할 수 없습니다. 원래 메시지를 작성한 거래의 해시를 알고 있다면 블록 체인 탐색기 (예 : Etherscan.io)를 사용하여 모든 세부 정보를로드 할 수 있습니다. 및 콘텐츠 / 데이터.

가스, 가스 가격, 거래 비용

블록 체인에서 읽는 것은 무료입니다…하지만 쓰기 (즉, 트랜잭션 실행)에는 비용이 발생합니다. 결국 모든 노드에서 하드 디스크 공간을 소비하기 때문입니다. 실제 저장 공간에 대한 비용을 지불하는 것 외에도 트랜잭션은 실행하는 데 필요한 계산 노력에 따라 비용이 발생합니다. 배열을 반복하고 결과를 생성하고 저장하기 전에 포함 된 모든 항목에 대해 계산을 수행하는 것은 더 복잡합니다. 더 비싸다.

자동차가 이더 리움에서 연료, 운영 및 저장을 소비하는 것과 마찬가지로 “가스”비용이 발생합니다 (이 스프레드 시트는 운영 별 운영 비용을 보여줍니다. 예를 들어, 2 개의 숫자를 합하면 3 개의 가스가 필요하고 곱하면 5 개의 가스가 소요됩니다). 연료 비용은 돈이고 가스 비용은 ETH입니다. ETH 비용은 가스 가격에 따라 다릅니다 (ETH 비용 = 가스 * 가스 가격). 이것은 고정되어 있지 않지만 가스 단위에 대해 지불 할 금액을 결정할 수 있습니다. 그러나 가스 가격이 너무 낮 으면 채굴자가 다음 블록에 포함 할 인센티브가 적기 때문에 거래가 보류중인 거래 풀에 더 오래 머물게됩니다. 대신 가격이 높을수록 속도가 빨라집니다. 평균, 저가 및 고가의 가스 가격은 ETH 주유소를 참조하십시오. (최종 가격이 USD 또는 다른 법정 화폐로 의미하는 바는 당연히 ETH의 현재 가치에 따라 다릅니다.)

거래를 실행할 때 소비 할 최대 가스량 ( gasLimit 또는 startGas 이라고 함)을 지정하고 가스 가격을 지정합니다. . 트랜잭션이 실행될 때 공급 한 것보다 더 많은 가스가 필요하면 “가스 부족”으로 인해 실패합니다. 하지만이 경우에도 여전히 수수료를 지불합니다. 모든 광부가 일을 한 후에 거래가 실패한 것은 그들의 잘못이 아니기 때문입니다. 대신 거래에서 최대 금액보다 적게 소비하는 경우 환불시 남은 금액은 다음과 같습니다.

필요한 실제 가스는 호출되는 스마트 계약의 기능과 전달하는 입력에 따라 달라 지므로 실행하기 전에 실제로 얼마나 많은 가스를 소비할지 결정하기가 어렵습니다. gasLimit은 지출 할 수있는 한도를 설정하고 버그가있는 (또는 악의적 인) 계약이 너무 많은 가스 비용이 드는 무한 루프를 실행하여 계정을 완전히 고갈시키는 것을 방지 할 수 있기 때문에 중요합니다!

참고 : 명확하게하기 위해 (많은 사람들이 처음에는 혼란스러워하기 때문에) 가스를 사거나 소유하지 않습니다. 계정에 Ether가 있고이를 사용하여 거래에 사용 된 가스 비용을 지불합니다.

ConsenSys의이 기사 또는 Danny Ryan의 다른 기사를 읽어보십시오.

유료 기능 — 개발자는 어떻게 돈을 버나요?

지금까지 저장 및 계산 노력에 따라 거래 비용을 지불하는 방법을 언급했지만 모든 수수료는 광부에게 전달됩니다. 계약 / 신청서를 작성하기 위해 피와 눈물을 흘린 가난한 개발자는 어떻습니까? 음, payable 수정 자로 표시된 함수에 ETH를 보낼 수 있거나 보내야한다는 것이 밝혀졌습니다 (위의 코드 샘플에서 postMessage 함수를 다시 확인하세요). 사용자는 송금 할 금액을 결정할 수 있습니다 (예 : 까마귀 펀딩 캠페인 또는 ICO의 경우) 또는 계약에 의해 집행되는 고정 금액 일 수 있습니다 (예 : 함수를 실행하려면 0.005 ETH를 보내거나 0.1을 보내야합니다. 디지털 자산 구매를위한 ETH). 그 금액은 기본적으로 계약으로 이체되고 소유자가 자신의 계정으로 인출하거나 다른 곳으로 이동할 때까지 유지됩니다. 이 작업이 수행되는 방법의 예를 보려면 공식 문서에서이 기사를 확인하십시오.

msg.sender 를 사용하면 보낸 사람 계정의 주소를 알고 있고 msg.value 를 사용하여 보낸 ETH를 알 수 있습니다. 이 두 값 (계약의 어느 곳에서나 액세스 할 수 있으며 msg 은 전역 개체와 유사 함)을 사용하여 충분한 ETH가 전송되었는지 확인하는 몇 가지 검사를 쉽게 작성하고 보낸 사람에게 무언가를 제공 할 수 있습니다 (예 : 어레이에 메시지를 보내고 계정 주소에 연결)

개발자의 관점에서 보면이 부분은 매우 멋집니다. 서비스에 대한 대가로 사용자로부터 돈을 받으려면 오늘날 전통적인 웹 사이트를 사용하여 무엇을해야하는지 생각해보십시오. Paypal, Square 또는 여러 결제 서비스 중 하나와 통합해야합니다. 즉, 계정을 등록하고 구성해야합니다. , 서비스의 API 또는 SDK 등과 통합 할 적절한 양의 코드를 작성하십시오. 대신 스마트 계약을 사용하여 함수를 지불 가능으로 표시하고 한 줄을 작성하여 올바른 금액이 전송되었는지 확인하고 완료되었습니다! (고객의 관점에서 프런트 엔드에서 어떻게 작동하는지 잠시 살펴 보겠습니다.)

다음 부분 : 3 부 : DApp 백엔드 배포 : Geth, Mist 및 Truffle

나는 누구인지 / 어떻게해야하나요? 저는 ASOS.com (iOS 앱 | Android 앱)의 모바일 팀에서 솔루션 아키텍트로 일하고 있으며 항상 강력한 인재를 찾고 있습니다. 수천만 명의 고객이 온라인에서 쇼핑하는 방식에 영향을 미치고 자하는 친절하고 재능있는 개발자. ASOS는 영국에서 가장 큰 온라인 전용 소매 업체이며, 세계 최고의 테크 + 패션 회사가 되겠습니다. 우리가 사용하는 기술 중 일부는 iOS 용 Swift, Android 용 Kotlin, 웹 프런트 엔드의 React 및 Node, 백엔드의 .NET 및 Azure입니다. 그게 흥미로울 것 같고 아름다운 런던에 살고 있다면 (또는 여기로 이사 할 의향이있는 경우… 결국 이탈리아를 제외하고는 유럽 최고의 도시입니다!) 저에게 연락해주세요!