Test RPC: Ethereum client for testing and development, 파이썬 구현체도있고 js구현체도 있지만 node.js기반의 ethereumjs/testrpc가 업데이트가 좋음.Geth: full ethereum node implemented in Gopyethapp: pyethereum+pydevp2p, complete networked Ethereum clientpyethereum: core blockchain related logicweb3.py, web3.js: The key connection between the Ethereum network and your dapp. Web3 allows you to compile, deploy, and interact with your smart contracts.ethereumjs-testrpc는 초기 개발에 사용하는 경량급 테스트넷 노드고 Geth는 Ropsten같은 대중적인 testnet과 연결될 수 있고 실제 이더리움 네트워크와도 연결될 수 있는 heavy한 노드. 참고, pyethapp도 노드 구현체 중 하나임web3는 Dapp과 Geth, testrpc같은 노드들을 연결시켜줌. ether-pudding은 web3의 래퍼web3는 컴파일과 배포를 할 수 있지만 solc는 컴파일만 할 수 있음.solidity로 스마트 컨트랙트 작성web3 혹은 solc를 이용해 바이트코드로 컴파일ABI를 얻음testrpc 실행web3를 이용해 localhost:port에 있는 testrpc에 바이트코드를 배포. 이 때 ABI가 사용됨컨트랙트 어드레스를 반환받을 수 있음web3를 이용해 컨트렉스 어드레스와 ABI를 이용해 컨트랙트를 가져와 함수를 실행시킬 수 있음.web3.js와 html를 연동시켜 웹 페이지와 블록체인에 있는 스마트 컨트랙트가 서로 통신할 수 있음.// 컴파일 결과물에서 ABI를 가져옴
abiDefinition = JSON.parse(compiledCode.contracts[':Voting'].interface)
// ABI를 통해 골격만 잡힌 컨트랙트 껍데기를 생성함
VotingContract = web3.eth.contract(abiDefinition)
byteCode = compiledCode.contracts[':Voting'].bytecode
// 껍데기에 바이트코드를 담아 컨트랙트를 배포함.
deployedContract = VotingContract.new(['Rama','Nick','Jose'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
// deployedContract는 컨트랙트 어드레스를 담고 있음
// 골격만 잡힌 컨트랙트에 .at 을 통해 실제 내용을 채워 컨트랙트를 객체화함
contractInstance = VotingContract.at(deployedContract.address)