유튜브에 있는 Lottery DApp 만들기(dapp campus) 를 들으며 적은 메모들. 솔
- Bignumber, BN. 이더리움에서는 다루는 숫자가 되게 크다. 2의 32-1까지 간다(?) 그래서 빅넘버 라이브러리 사용해서 많이 처리하고, 파라미터로 넣어줄 때 스트링으로 넣어주면 블록체인(이더리움)에서 스트링을 알아서 빅넘버로 전환해서 많이 사용함.
- 테스크코드 작성시, migrate에 있는 배포 스크립트를 사용할 수 있지만 사용하지 말고, 테스트코드 내에서 배포한 스마트컨트랙트를 사용해라.
- 스컨 안에서 확인할 수 있는 블록해쉬값은 최근 256블록까지만. 예를들어 280번 블록이라면 25번 이후 블록이후부터만 블록해쉬값을 확인 가능. 블록해쉬 값을 확인 불가능한 경우 결과 검증 못하기 때문에 받은 돈을 돌려줘야.
- safemath : integer overflow 일어나는지 확인
- 맵에 있는 값을 delete하게 되면 가스를 돌려받는다. status database에 있는 값을 없애기 때문에. 그래서 사용하지 않는 값은 늘 삭제해주는 것이 좋다
- 이더리움에서 사용할 수 있는 난수는 block.timestamp, now 등을 사용할 수 있지만 이들은 마이너가 담함하면 조작이 가능할 수 있다. 그래서 완전히 안전하지 않다. 그래서 이더리움에서 만드는 프로젝트가 람다오가 있다. 아무튼 너무 중요한 프로젝트면 난수에 대한 고민을 많이 해줘야 한다. 외부에서 랜덤 시드 값을 변경해주는 것도 방법.
- modifier 사용해 onlyonwer 하는 거 유명하다.
- 스-컨에서 이벤트 로그를 찍을 수 있다. 스-컨에서 안에서 호출하는 값과는 다르게 블록체인 함수로 호출할 수 있고 로그로 따로 모을 수 있다. 만약 ‘BET’ 이라는 이벤트 만들었고 BET이라는 로그가 찍혀있다면 우리는 web3.js 사용해 프론트엔드에서 블록체인에 찍힌 BET이라는 로그들을 긁어올 수 있다.
- 스-컨에서 돈 전송하는 대표적 방법 3가지는 call, send, transfer.
그중 transfer 젤 마니 사용함. 이더만 전송하고, 만약 실패하면 트랜잭션 자체를 실패시켜서 가장 안전.
send는 돈 보냈더라도 false를 리턴. 트랜잭션 fail 나는 상황은 아니라서 catch 해서 따로 처리 가능. 돈을 보내는 것을 실패한 경우를 생각했다면 그에 따라 처리를 또 하면 되지만, 생각 못한 경우도 있다.
call은 이더 전송과 동시에 다른 스-컨의 특정 함수 호출도 가능. 외부 스-컨 함부로 호출하는 것은 (내가 컨트롤 할 수 있는게 아니므로) 굉장히 위험. 예전 덕아웃 사태나 여러 문제들의 원인이었다.
그래서 대부분 transfer 사용하는 게 낫다.
- 가스 사용량 줄이는 코드를 설계할 때, 솔리디티에서 코드를 추가함으로써 가능하기도 하고 어셈블리에서 할 수 있는 부분도 있다.