-
Notifications
You must be signed in to change notification settings - Fork 2
솔리디티 개발
MoSangIl edited this page Sep 10, 2021
·
11 revisions
struct Room {
uint256 roomNumber;
string name;
string menu;
}
// Array with all rooms
Room[] public rooms;
function createRoom(uint256 _roomNumber, string memory _name, string memory _menu) public returns(bool) {
Room memory newRoom;
newRoom.roomNumber = _roomNumber;
newRoom.name = _name;
newRoom.menu = _menu;
rooms.push(newRoom);
return true;
}
truffle console --network development
Demo.deployed().then(function(instance) {return instance.createRoom(1, 'BBQ', 'Chicken')})
Demo.deployed().then(function(instance) {return instance.createRoom(2, 'KFC', 'Hamberger')})
Demo.deployed().then(function(instance) {return instance.createRoom(3, 'BHC', 'Chicken2')})
function getRoomsById(uint _roomId) public view returns(
uint256 roomNumber,
string memory name,
string memory menu) {
Room memory room = rooms[_roomId];
return (
room.roomNumber,
room.name,
room.menu);
}
truffle console --network development
Demo.deployed().then(function(instance) {return instance.getRoomsById.call(0)})
Demo.deployed().then(function(instance) {return instance.getRoomsById.call(1)})
Demo.deployed().then(function(instance) {return instance.getRoomsById.call(2)})
* 룸갯수
Demo.deployed().then(function(instance) {return instance.getRoomCounts.call()})
ref) 1. 블록체인 원장에 가스비를 소모하여 데이터를 넣을 때 createRoom(1, 'BBQ', 'chicken') -> 함수명만 쓴다.
2. 블록체인 원장에서 가스비를 소모하지 않고 단순히 데이터를 읽어올 때 getRoomsById.call(0) -> 함수명.call을 쓴다.
const getBalance = await instance.getBalance({
from: accounts[0],
value: 100,
});
- targetAddr => 이더를 전송 받는 계좌
- 함수가 정의된 CA 에서 targetAddr로 해당 이더만큼 전송됨
function transferTo(address payable targetAddr) public {
targetAddr.transfer(10);
}
- fallback함수는 CA to CA에서 주의해야할 부분이다.
- 이더를 전송받는 CA의 컨트랙트에는 아래와 같은 fallback 함수가 반드시 정의되어 있어야 한다.
function() external payable{}
pragma solidity ^0.5.2;
contract A{
uint public num = 10;
function getNum() view external returns (uint){
return num;
}
function setNum(uint _num) public{
num = _num;
}
}
pragma solidity ^0.5.2;
import "./A.sol";
contract B {
// A 타입 배열 선언
A[] a_s;
// A 인스턴스 생성 및 배열 삽입
// A 인스턴스의 getNum 함수 호출
// A 인스턴스의 setNum 함수 호출
}
- new 키워드를 사용한다. (java와 같음)
contract B {
// A 타입 배열 선언
A[] a_s;
// A 인스턴스 생성 및 배열 삽입
function makeA() public {
A a = new A();
a_s.push(a);
}
// A 인스턴스의 getNum 함수 호출
// A 인스턴스의 setNum 함수 호출
}
- <인스턴스>.[함수이름] (params...)
contract B {
// A 타입 배열 선언
A[] a_s;
// A 인스턴스 생성 및 배열 삽입
function makeA() public {
A a = new A();
a_s.push(a);
}
// A 인스턴스의 getNum 함수 호출
function getANumber(uint256 id) public returns(uint) {
A a = a_s[id];
return a.getNum();
}
// A 인스턴스의 setNum 함수 호출
function setANumber(uint id, uint _num) public {
A a = a_s[id];
a.setNum(_num);
}
}
> truffle console
> B.deployed().then(function(instance) {app = instance})
> app.makeA()
> app.getANumber.call(0)
=> 10
> app.setANumber(20)
> app.getANumber.call(0)
=> 20