일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- xcode
- Device 등록
- 리브어보드
- 지팍스페인
- 스페인광장
- 연금저축펀드
- 그라나다
- 강릉
- Cocoapods #PrivateRepo #SpecRepo
- 괌 자유여행
- 푸켓여행
- Swift #Concurrency #쓰레드
- 대한항공
- 라이브러리
- cocoapod
- 도심공항
- 스쿠버다이빙
- swiftUI
- SwiftUI #Skeleton #데이터갱신
- 러브스플리트
- 세비야
- 공기먹는다이버스
- 크로아티아
- 러브자그레브
- 시밀란
- 스플리트
- Concurrency #Swift #Combine
- Gradle
- 스페인여행
- 아시아나
- Today
- Total
JEP's Diary
web3swift 3.0.4 적용 중...포기를 선언한 이유 본문
web3swift 2.6.6 사용중에 type encode 관련 이슈가 있었기도 했고 그 다음 버전이 3.0.4까지 나와있는 상황이라 적용을 검토했다.
라이브러리 변경 후 빌드 에러를 없애기 위해 3시간 정도 소요했고, 그 이후에는 라이브러리를 가져다가 사용하는 기능들은 테스트 코드에서 모두 확인해보려 했다.
ReadOperation
먼저 klay, token 잔액 조회는 성공!
두개의 케이스는 ReadOperation을 이용한다.
WriteOperation
그 다음에 klay, token 전송 테스트 코드를 작성했는데, 자꾸 Web3Error.dataError를 만났다.
아직 web3swift document가 공사중인 상태라서, 처음에는 web3 세팅 provider 세팅 parameter 값들 세팅을 의심하여 요리조리 바꿔보고 실행해보았지만 여전히 같은 에러가 났다. 값 세팅이 잘되어 있는지를 확인한 것은 web3swift git에서 test 코드들이 같이 들어있어서 해당 파일을 참고 했다.
따라서 이것은 분명 다른 문제일거다! 라고 추측하고 디버깅에 들어갔다.
1. 그래서 발견한 것은 CodableTransaction의 data 필드의 값이 제대로 들어가지 않았던 부분을 발견했는데, data에는 컨트랙트의 실행할 메서드 Encoded ABI Data가 들어가기 때문에 꼭 있어야 하는 부분이다. 이부분은 이슈에서 수정했다는 답변을 확인하여 관련된 부분을 라이브러리응 unlock 해서 직접 수정했다.
2. 이부분을 수정하고 나니 send 하는 부분에서 예외처리 로직에서 Web3Error.dataError가 나고 있었다.
ByteArray 타입인 Data를 hexString 하는 로직을 아래와 같이 수정 후 트랜잭션이 잘나가는 것을 확인 했다. 이부분도 이슈에 있던 답변을 확인하고 적용했다.
extension Web3.Eth {
public func send(raw data: Data) async throws -> TransactionSendingResult {
// 주석된 부분이 문제가 되었던 부분!!
// guard let hexString = String(data: data, encoding: .utf8)?.addHexPrefix() else {
// throw Web3Error.dataError
// }
// let request: APIRequest = .sendRawTransaction(hexString)
수정한 부분!
let request: APIRequest = .sendRawTransaction(data.toHexString().addHexPrefix())
let response: APIResponse<Hash> = try await APIRequest.sendRequest(with: self.provider, for: request)
return try TransactionSendingResult(data: data, hash: response.result)
}
}
이 부분을 이틀동안이나 삽질했다 ㅜㅜ
아직 라이브러리가 3점대여도 잦게 수정되어 릴리즈 되고 있고, 직접 적용해봐서 라이브러리 안에 로직에서 수정이 필요하다는 결론이 내려지니 아직 3.0.4는 적용하기에는 시기상조이다. 그래서 3.0.4 적용 중단을 결정!
최종 테스트 코드..
// 클레이전송
func testTransferKlay() async throws {
do {
let fromAddress = EthereumAddress("0x...")!
let toAddress = EthereumAddress("0x...")!
let amountString = "1.3"
guard let amount = Utilities.parseToBigUInt(amountString, units: .eth)
else { throw TransactionError.ERROR_TRANSFER_KLAY }
guard let contract = web3.contract(Web3.Utils.coldWalletABI, at:toAddress, abiVersion: 2)
else { throw TransactionError.ERROR_TRANSFER_KLAY }
guard let writeOp = contract.createWriteOperation("fallback", parameters: [AnyObject]())
else { throw TransactionError.ERROR_COMMON }
writeOp.transaction.value = amount
writeOp.transaction.from = allAddress[0]
writeOp.transaction.gasLimitPolicy = .manual(값) //
let result = try await writeOp.writeToChain(password: "web3swift")
dump(result)
} catch {
dump(error)
}
}
언능 Documentation이 나왔으면 좋겠당...ㅜ
'Development > 개발일지' 카테고리의 다른 글
올해의 회사일의 목표, Xcode Cloud 사용해보기 (0) | 2023.02.08 |
---|---|
git flow 전략 (0) | 2023.02.07 |
오늘의 Compose 키워드 (0) | 2022.11.10 |
지갑에 충분한 잔액이 있었지만, insufficient balance 에러를 만난 이슈 (0) | 2022.11.01 |
모듈화 그리고 팩토리패턴 (0) | 2022.10.31 |