solidity 예제

계약은 내부 메시지 호출을 사용하여 남은 가스의 양을 어느 정도 보내야 하는지, 보유할 가스를 얼마나 유지할지 결정할 수 있습니다. 내부 호출(또는 기타 예외)에서 기체 외 예외가 발생하는 경우 스택에 놓인 오류 값으로 신호가 표시됩니다. 이 경우 호출과 함께 전송된 가스만 사용됩니다. Solidity에서 호출 계약은 이러한 상황에서 기본적으로 수동 예외를 발생시켜 예외가 호출 스택을 “거품”되도록 합니다. Alice는 메시지에 계약 주소를 포함하여 이 공격을 방지할 수 있으며 계약 주소 자체가 포함된 메시지만 수락합니다. 이 섹션의 끝에 있는 전체 계약의 청구 지불() 함수의 처음 두 줄에서 이 예제를 찾을 수 있습니다. 브라우저에서 아무 것도 다운로드하거나 컴파일할 필요 없이 Solidity를 사용할 수 있습니다. 이 응용 프로그램은 컴파일만 지원합니다 – 코드를 실행하거나 블록 체인에 주입하려면 AlethZero와 같은 클라이언트를 사용해야합니다. Solidity 최적화 프로그램은 어셈블리에서 작동하므로 다른 언어에서도 사용할 수 있습니다. 그것은 이동하기 어려운 지점에서 기본 블록으로 지침의 순서를 분할합니다. 이들은 기본적으로 제어 흐름 (점프, 호출 등),MSTORE 및 SSTORE (LOGi, EXTCODECOPY, 뿐만 아니라 CALLDATALOAD 등)에서 떨어져 부작용이있는 명령을 수정하는 모든 명령입니다. 이러한 블록 의 내부, 명령이 분석되고 스택에 대한 모든 수정, 메모리 또는 저장소는 명령과 본질적으로 다른 식에 대한 포인터 인수 목록으로 구성된 식으로 기록됩니다. 이제 주요 아이디어는 항상 동일한 식(또는 모든 입력)을 찾아 식 클래스로 결합하는 것입니다.

최적화 프로그램은 먼저 이미 알려진 식 목록에서 각 새 식을 찾으려고 시도합니다. 그래도 이 작업이 작동하지 않으면 식은 상수 + 상수 = sum_of_constants 또는 X * 1 = X와 같은 규칙에 따라 단순화됩니다. 이 작업은 재귀적으로 수행되므로 두 번째 요소가 항상 하나씩 평가된다는 것을 알고 있는 더 복잡한 표현식인 경우 후자의 규칙을 적용할 수도 있습니다. 저장소 및 메모리 위치에 대한 수정은 서로 다른 것으로 알려져 있지 않은 저장소 및 메모리 위치에 대한 지식을 지워야 합니다. 실제로 우리가 y에 쓴 후 x에 저장되는 것을 모른다. 반면에 식 x-y의 단순화가 0이 아닌 상수로 평가되는 경우 x에 저장된 내용에 대한 지식을 유지할 수 있다는 것을 알고 있습니다. Solidity의 의미에서 계약은 이더리움 블록 체인의 특정 주소에 있는 코드(해당 기능) 및 데이터(해당 상태)의 모음입니다. 라인 uint 저장데이터; 저장이라는 상태 변수를 선언uint 형식 uint의 데이터 (256 비트의 서명되지 않은 정수).

데이터베이스를 관리하는 코드의 함수를 호출하여 쿼리하고 변경할 수 있는 데이터베이스의 단일 슬롯으로 생각할 수 있습니다. 이더리움의 경우, 이것은 항상 소유 계약입니다. 이 경우 설정 및 get 함수를 사용하여 변수값을 수정하거나 검색할 수 있습니다. 첫 번째 줄은 단순히 소스 코드가 Solidity 버전 0.4.0 또는 기능을 중단하지 않는 최신 버전(버전 0.5.0까지 는 포함되지 않음)에 대해 작성되었다는 것을 알려줍니다. 이는 계약이 새 컴파일러 버전과 다르게 작동하지 않도록 하기 위한 것입니다. 일반적으로 pragmas는 소스 코드를 처리하는 방법에 대한 컴파일러의 지침이기 때문에 pragma라는 키워드를 그런 식으로 합니다.

This entry was posted in Uncategorized. Bookmark the permalink.

Comments are closed.