어떻게 자바 를 사용 하여 이 더 리 움 거래 를 보 냅 니까?
나 는 자바 로 사 무 를 보 내야 하기 때문에 EthereumJ 를 살 펴 보 았 다.당신 은 세 가지 선택 이 있 습 니 다:
거래 를 왜 보 내 요?나 는 간단명료 한 용례 가 생각 나 지 않 는 다. 아마도 당신 은 기 존 지갑 보다 더 좋 은 지갑 을 실현 하고 싶 을 것 이다.예 를 들 어 저 는 제 상황 에서 해시 체인 의 머리 를 블록 체인 에 저장 해서 변경 되 지 않도록 하려 고 합 니 다.
제 특정한 상황 에서 저 는 거래 의 일부분 으로 저 장 된 특정한 데이터 가 거래 자체 보다 더 관심 이 많 기 때문에 저 는 두 노드 가 서로 아주 작은 거래 (무 작위 로 발송 자 와 수신 자 를 선택) 를 보 냅 니 다.나 는 내 가 스마트 계약 을 통 해 이 점 을 할 수 있다 는 것 을 알 고 있 지만, 매번 한 걸음 만 필요 하 다.초기 코드 는 여기에서 찾 을 수 있 으 며, 어느 정도 EthereumJ 예제 에 기반 을 두 고 있 습 니 다.EthereumJ 는 내부 에서 spring 을 사용 하기 때문에 제 응용 프로그램 은 spring 을 사용 하기 때문에 두 노드 를 허용 하 는 데 추가 적 인 노력 을 기 울 였 습 니 다. 그러나 이것 은 주어진 임무 와 무관 합 니 다.이 코드 의 가장 중요 한 부분 은 아래 의 글 에서 더 볼 수 있 으 며, 조금 만 수정 하면 된다.
클래스 경로 에
user.conf
파일 이 있 고 기본 값 이 있어 야 합 니 다. 이 파일 은 기본 etherumj config 를 기반 으로 할 수 있 습 니 다.더 중요 한 부분 은 외부 user 1 과 user 2 conf 파일 입 니 다.이것 은 예시 로 다음 과 같은 중요 한 매개 변 수 를 가지 고 있다.peer.networkId
– 실제 생산 네트워크 (= 1) 를 사용 합 니까? 테스트 네트워크 (= 3) 를 사용 합 니까?분명히 생산 외 에 당신 은 네트워크 를 테스트 해 야 합 니 다.테스트 네트워크 에서 수도 꼭 지 를 사용 하여 무료 에틸에테르 를 얻 을 수 있 습 니 다.테스트 네트워크 를 사용 하기 위해 서 는 두 개의 인자 blockchain.config.name = ropsten
와 genesis = ropsten.json
가 있다.현재 더 많은 테스트 네트워크 가 시험 작업량 증명 에 사용 되 는 대체 방법 이 있 음 을 주의 하 십시오.peer.privateKey
- 이것 이 가장 중요 한 자리 입 니 다.이것 은 비밀 키 입 니 다. 블록 체인 '계 정' 을 제어 할 수 있 습 니 다.이 비밀 키 를 사용 해 야 거래 에 서명 할 수 있 습 니 다 (타원 곡선 알고리즘 사용).비밀 키 는 해당 하 는 공개 키 가 있 습 니 다. 이 공개 키 는 기본적으로 네트워크 에 있 는 주소 입 니 다. - 자금 을 보 내 려 는 사람 이 있 으 면 공개 키 로 보 냅 니 다.그러나 다른 사람 이 비밀 키 를 가지 고 있 지 않 기 때문에 귀하 만 계좌 에서 자금 을 이체 할 수 있 습 니 다.이것 은 당신 이 그것 을 보호해 야 한 다 는 것 을 의미 합 니 다.이러한 상황 에서, 그것 은 순수한 텍스트 형식 으로 파일 에 존재 합 니 다. 만약 당신 이 대량의 에틸에테르 를 사용한다 면, 이것 은 이상 적 인 선택 이 아 닐 수도 있 습 니 다.일부 키 관리 솔 루 션 사용 고려 (이와 같이) peer.ip.list
– 이것 은 선택 할 수 있 지만 더욱 바람 직 합 니 다 - 클 라 이언 트 를 네트워크 의 일부분 으로 유도 하기 위해 연결 할 대등한 목록 이 필요 합 니 다.그곳 의 피 어 투 피 어 노드 는 다른 피 어 투 피 어 노드 에 연결 되 어 있 습 니 다. 이 를 통 해 유추 되 기 때문에 결국은 서로 연 결 된 네트워크 입 니 다.서버 / 클 러 스 터 / 스 택 에 포트 번 호 를 사용 하려 면 포트 번호 와 결합 하여 사용 해 야 합 니 다. 다른 네트워크 설정 이 필요 합 니 다 – 포트 를 열 고 전송 과 연결 을 허용 해 야 합 니 다.database.dir
– 블록 체인 과 대등한 목록 이 발 견 된 디 렉 터 리 입 니 다.그것 은 leveldb 를 사 용 했 는데, 나 는 etherumj 가 유행 이 지난 leveldb 를 사 용 했 는데, 이 버 전 은 나의 기계 에서 작용 하지 않 는 다 는 것 을 발견 했다.그래서 제 가 그것들 을 제외 하고 수 동 으로 새로운 버 전 을 사 용 했 습 니 다 sync.enabled
- 체인 을 가 져 올 지 여부 sync.enabled
.보통 시간 이 많이 걸 리 기 때문에 필요 하지 않 습 니 다. 그러나 그러면 완전한 노드 가 아니 고 네트워크 에 기여 하지 않 습 니 다.앞에서 말 한 바 와 같이 나 는 완전한 노드 가 필요 없고 사 무 를 보 내 면 된다.경 형 노드 는 할 수 있 습 니 다. (차이 점 은 sync. enabled 를 true 에서 false 로 전환 하 는 것 일 뿐 입 니 다.) 그러나 처음에 대등한 노드 에 성공 한 후에 저 는 이상 한 이상 을 만 났 습 니 다. 저 는 연구 할 시간 이 없어 서 네트워크 에 가입 할 수 없습니다. (제 가 현재 사용 하고 있 는 무선 네트워크 가 너무 나 쁜 것 일 수도 있 습 니 다)
다행스럽게도 완전히 '오프라인' 방법 이 있 습 니 다. 외부 API 를 사용 하여 거래 를 발표 합 니 다.귀하 가 해 야 할 일 은 귀하 의 비밀 키 와 라 이브 러 리 (이 예 에서 EthereumJ) 로 귀하 의 거래 를 준비 하 는 것 입 니 다.따라서 앞의 단락 에서 읽 은 모든 내용 을 잊 을 수 있 습 니 다.서명 후 RLP 인 코딩 거래 만 하면 됩 니 다.예 를 들 면:
byte[] nonce = ByteUtil.intToBytes(getTransactionCount(senderAddress) + 1);
byte[] gasPrice = getGasPrice();
Transaction tx = new Transaction(
nonce,
gasPrice,
ByteUtil.longToBytesNoLeadZeroes(200000),
receiverAddress,
ByteUtil.bigIntegerToBytes(BigInteger.valueOf(1)), // 1 gwei
data.getBytes(StandardCharsets.UTF_8),
CHAIN_ID);
tx.sign(ECKey.fromPrivate(senderPrivateKey));
byte[] rawTx = tx.getEncoded();
restTemplate.getForObject(etherscanUrl, String.class, "0x" + BaseEncoding.base16().encode(rawTx));
이 예제 에서 저 는 Etherscan. io API 를 사용 합 니 다.거래 를 테스트 하기 위해 서 수 동 으로 표를 입력 하 십시오. (링크 는 Ropsten 테스트 네트워크 에 사 용 됩 니 다.)
위의 매개 변 수 는 무엇 입 니까?
nonce
– 이것 은 모든 사용자 (= 모든 비밀 키) 가 거래 하 는 시리 얼 번호 입 니 다.모든 후속 거래 는 하나의 랜 덤 수, 즉 이전 곡 + 1 의 랜 덤 수 를 가 져 야 한다.이렇게 하면 그 누구 도 같은 거래 를 재방송 하고 발송 자의 자금 을 소모 할 수 없습니다 (이미 서명 한 거래 는 무 작위 수 를 포함 하기 때문에 귀 하 는 같은 원시 거래 로 표시 하고 다시 제출 할 수 없습니다).어떻게 랜 덤 수 를 획득 합 니까?이 더 리 움 네트워크 에 연결 하면 하나 ethereum.getRepository().getNonce(fromAddress);
가 있 습 니 다.단, 연결 이 끊 긴 상태 에서 보 낸 사람의 현재 트 랜 잭 션 수 를 가 져 와 서 점차 늘 려 야 합 니 다.이것 은 eth_getTransactionCount
단점 을 통 해 완 성 된 것 이다.16 진법 으로 되 돌아 오기 때문에 해석 해 야 합 니 다. 예 를 들 어 {"jsonrpc":"2.0","result":"0x1","id":73}
receiverAddress
– 수신 자의 공개 키 를 대표 하 는 바이트 배열 value
– 얼마나 보 내 시 겠 습 니까?최소 단 위 는 사실상 gwei 로 이 값 은 gweis (1 ETH 의 점수) 로 지정 된다.data
- 업무 에 넣 을 다른 데 이 터 를 입력 하 십시오.chainId
– 귀하 가 사용 하 는 네트워크 와 다시 관련 이 있 습 니 다.생산 = 1, Ropsten 테스트 네트워크 = 3.왜 업무 중 에 인 코딩 을 해 야 하 는 지 궁금 하 시 면 여기 서 읽 으 실 수 있 습 니 다.그 다음 에 비밀 키 를 사용 하여 트 랜 잭 션 의 원본 표시 형식 에 서명 합 니 다 (원본 표시 형식 은 RLP (재 귀적 길이 접두사).그리고 API 로 보 냅 니 다. (이 를 위해 키 가 필요 합 니 다. Etherscan 에서 얻 고 URL 에 포함 시 킬 수 있 습 니 다.)이것 은 거의 연 결 된 작업 과 같 습 니 다.하지만 지금 은 네트워크 의 일부분 이 아니 라 중앙 방 (Etherscan) 에 의존 하고 있 습 니 다.
그것 은 매우 간단 해 보일 수 있 습 니 다. 당신 이 그것 을 완성 하고 파악 할 때 식 은 죽 먹 기다 고 들 리 지만 세부 사항 이 너무 많아 서 아무 도 당신 에 게 서 추상 화 할 수 없 기 때문에 당신 은 먼저 전체 과정 이 거래 를 추진 할 수 있다 는 것 을 전면적으로 이해 해 야 합 니 다.랜 덤 수, chainId 가 무엇 인지, 테스트 네트워크 가 무엇 인지, 테스트 이 더 리 움 (롭 슨 수도꼭지 의 Google 최상 위 검색 결 과 를 가 져 오 는 방법 은 현재 정상적으로 실행 되 지 않 기 때문에 이 점 을 알 아야 합 니 다) 을 확인 한 다음, 이상 한 연결 문제 와 네트워크 설정 을 해결 하기 위해 체인 을 동기 화 할 지 여 부 를 확인 해 야 합 니 다.스마트 계약 도 언급 하지 않 았 다.나 는 결코 이것 이 매우 나쁘다 고 말 하 는 것 이 아니 라, 이것 은 아직 간단 하지 않다. 이것 은 광범 위 하 게 사용 되 는 장애 이다.그러나 이 는 대부분의 프로 그래 밍 에 적 용 될 수 있다.어쨌든 나 는 상기 예시 가 사람들 로 하여 금 더욱 쉽게 일 을 시작 하 게 할 수 있 기 를 바란다.
번역https://www.javacodegeeks.com/2017/08/send-ethereum-transactions-java.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.