네 심플하고 아주 편하지만, 아직 solidity 가 매우 단순해서요, 타 언어에 비해서는 지원되는 기능이 약한 편이긴 합니다. 예를 들어 저장된 데이타가 몇개인지 알려주는 함수도 없습니다. ㅋ
대신 오픈 소스 iterable_mapping 을 사용하시면 좀 더 편합니다. (공식 문서에 링크되어 있는 소스에요)
변수 개수에 제한이 있다는 얘기는 들어본 적이 없습니다.
네 심플하고 아주 편하지만, 아직 solidity 가 매우 단순해서요, 타 언어에 비해서는 지원되는 기능이 약한 편이긴 합니다. 예를 들어 저장된 데이타가 몇개인지 알려주는 함수도 없습니다. ㅋ
대신 오픈 소스 iterable_mapping 을 사용하시면 좀 더 편합니다. (공식 문서에 링크되어 있는 소스에요)
변수 개수에 제한이 있다는 얘기는 들어본 적이 없습니다.
그리고 이 소스코드를 컴파일링해서 실행하는 역할은 누가 하는 건가요? 실행자의 pc가 하는건가요 아니면 채굴자가 하는건가요?
좋은 질문입니다~ 컴파일해서 블록화되면 채굴 과정을 통해 실행된다고 보시면 됩니다. 프로그램 실행을 위한 가스비를 채굴자가 가져갑니다. ^^
그럼 해당 소스코드의 컴파일은 이용자가 하고 그것을 블록체인에 올리면 채굴자가 채굴을 해서 검증을 함과 동시에 실행이 되는건가요?
네 맞습니다. 저는 그렇게 이해하고 있습니다. ^^
제가 글을 읽다가 require부분에서 잠시 멈췄는데 이게 악용될수있다고 생각했거든요. 만약 누군가가 악의적으로 많은 계산이 필요한 소스코드를 require앞에 배치시키고 무조건적으로 작동하는 require(false)를 뒤에 둔 다음 이 스마트 컨트랙트를 엄청나게 보내면 돈 한푼 안들이고 디도스 공격이 가능하지 않을까해서요...
오, 그런 관점 재밌네요. 상상력이 대단하십니다!
실패하는 트랜잭션을 실행해보면 채굴로 보내기 전에 자기 노드에서 선 실행해보는 것 같아요. 바로 실패가 떨어지더라고요.
오래된 블록에 있는 스마트 콘트랙트거나 라이트 싱크모드일 때는 어떨지 모르겠어요. 내 블록체인에 없는 정보일 때는 연결된 peer 에서 선 실행이 될런지? 혹은 peer 에서 컨트랙트 소스를 받아다가 내 컴퓨터에서 선 실행이 될런지?
만약 후자라면 kardus 님께서 지적하신 부분이 설계 당시 미리 검토 되었을 가능성이 크겠네요.