contract sample1 { int a; functionsample1(int b) payable{ a = b; } functionassign(int c) { a = c; } functionmakePayment(int d) payable{ a = d; } }
contract sample2 { functionhello() { } functionsample2(address addressOfContract) { // 컨트랙트 인스턴스 생성하며 12 wei 전송 sample1 s = (new sample1).value(12)(23); s.makePayment(22); // 다시 이더 전송 s.makePayment.value(45)(12); // 사용할 가스의 양 지정 s.makePayment.gas(895)(12); // 이더를 전송하고 가스를 다시 지정 s.makePayment.value(4).gas(900)(12); // hello()는 내부 호출이며, this.hello()는 외부 호출 this.hello(); // 이미 배포된 컨트랙트를 지정 sample1 s2 = sample1(addressOfContract); s2.makePayment(112); } }
가시성
가시성(visiability)은 누가 볼 수 있는지 정의한다.
external
다른 컨트랙트나 트랜잭션을 통해서만 호출될 수 있다. f()는 동작하지 않지만 this.f()는 동작한다.
public
모든 방법으로 접근할 수 있다. 단, setters는 생성하지 않기 때문에 이미 지정된 값을 변경할 수는 없다.
contract sample1 { int public b = 78; int internal c = 90; functionsample1() { // 외부(external) 접근 this.a(); // 컴파일 오류 a(); // 내부(internal) 접근 b = 21; // 외부(external) 접근 this.b; // 외부(external) 접근 this.b(); // 컴파일 오류. setters가 지정되어 있지 않아 값을 변경할 수 없다. this.b(8); // 컴파일 오류. internal은 this로 접근할 수 없다. this.c(); // 내부(internal) 접근 c = 9; } functiona() external{ } } }
contract sample2 { int internal d = 9; int private e = 90; }
// sample3은 sample2를 상속 contract sample3 is sample2 { sample1 s; functionsample3() { s = new sample1(); // 외부(external) 접근 s.a(); // 외부(external) 접근 var f = s.b; // 컴파일 오류. 접근자를 통해 값을 할당할 수 없다. s.b = 18; // 컴파일 오류. c는 internal. s.c(); // 내부(internal) 접근 d = 9; // 컴파일 오류. e는 private. e = 7; } }