구조체를 사용하면 새로운 유형을 정의 할 수 있습니다, 각 프리랜서는 자신의 프리랜서 데이터를해야합니다. 이 예제에서는 프리랜서의 일부 데이터를 다른 계약과 인터페이스하는 두 가지 방법이 있습니다. 두 용도 모두 아래 예제에 나와 있습니다. (분명히) 만들 수 있는 계약의 소스 코드를 알려야 합니다. 의 생성 계약)을 작성합니다. “견고성은 스마트 계약을 구현하기 위한 계약 지향적이고 높은 수준의 언어입니다. C++, 파이썬, 자바스크립트의 영향을 받았으며 이더리움 가상 머신(EVM)을 대상으로 설계되었습니다.” 이 계약은 몇 가지 새로운 개념을 소개합니다. 그 중 하나는 연산 연산을 허용하지 않는 160 비트 값인 주소 유형입니다. 또한 상태 변수 균형은 서명되지 않은 정수에 주소를 매핑하는 복잡한 데이터 형식입니다. 매핑은 가능한 모든 키가 존재하고 바이트 표현이 모두 0인 값에 매핑되도록 사실상 초기화된 해시테이블로 볼 수 있습니다. 특별한 기능 동전은 계약을 생성하는 동안 실행되는 생성자이며 나중에 호출 할 수 없습니다. 그것은 영구적으로 계약을 만드는 사람의 주소를 저장 : TX 및 블록과 함께, msg는 계약 외부 세계에 대한 액세스를 허용하는 몇 가지 속성을 포함하는 마법의 글로벌 변수입니다. 함수 queryBalance는 상수로 선언되므로 계약 상태를 수정할 수 없습니다(아직 적용되지 않음).

Solidity에서 반환 “매개 변수”의 이름이 지정되고 기본적으로 지역 변수를 만듭니다. 따라서 잔액을 반환하기 위해 저울 = 잔액[addr]만 사용할 수도 있습니다. 반환 명세서없이. 첫 번째 줄은 단순히 소스 코드가 Solidity 버전 0.4.0 또는 기능을 중단하지 않는 최신 버전(버전 0.5.0까지 는 포함되지 않음)에 대해 작성되었다는 것을 알려줍니다. 이는 계약이 새 컴파일러 버전과 다르게 작동하지 않도록 하기 위한 것입니다. 일반적으로 pragmas는 소스 코드를 처리하는 방법에 대한 컴파일러의 지침이기 때문에 pragma라는 키워드를 그런 식으로 합니다(예: pragma 한 번). Alice는 메시지에 계약 주소를 포함하여 이 공격을 방지할 수 있으며 계약 주소 자체가 포함된 메시지만 수락합니다. 이 섹션의 끝에 있는 전체 계약의 청구 지불() 함수의 처음 두 줄에서 이 예제를 찾을 수 있습니다. 위의 경우 mortal.kill()을 파괴 요청을 “전달”이라고 합니다. 다음 예제에서 볼 수 있듯이 이 작업을 수행하는 방법은 문제가 됩니다. 당신이 지금 모든 것을 이해하지 않는 경우 괜찮습니다, 우리는 나중에 더 자세히 갈 것입니다.

Solidity의 형식 시스템에는 구문에 해당 되는 형식이 없는 몇 가지 형식이 있습니다. 이러한 유형 중 하나는 함수 유형입니다.