스팀 앱 개발기 #43 - 지갑 화면에서 VEST 값을 SP로 변환

시작하며...

지갑 화면에서 스팀 파워를 VEST 단위에서 SP 단위로 바꾸는데 성공했습니다.


스크린샷

아래 그림과 같이 이제 스팀 파워는 우리가 이해할 수 있는 SP 단위로 보입니다. 이제 뭐가 진행이 된 듯한 기분이 드네요.

IMAGE 2022-10-09 23:38:26.jpg


작업 개요

  • SteemitWallet 데이터 클래스 수정
  • GetAccountsResponseDTO 데이터 클래스 수정
  • SteemRepositoryImpl 클래스 수정

SteemitWallet 데이터 클래스 수정

수정 사항은 다음과 같습니다.

  • getEffectiveSteemPowerVest 메소드 제거
  • 스팀 파워 수량을 의미하는 effectiveSteemPower 필드 추가
    • GetAccountsResponseDTO 클래스의 toSteemitWallet() 메소드로 코드 이동
  • 스팀 파워 관련 필드 이름들의 끝부분 Vest 제거
  • 필드들의 디폴트 값 수정
    • 0.000 STEEM 대신 - STEEM
    • 0.000 SBD 대신 - SBD
    • 0.000000 VEST 대신 - VEST

SteemitAccountDTO 데이터 클래스 수정

  • toSteemitWallet(getDynamicGlobalPropertiesDTO: GetDynamicGlobalPropertiesDTO?) 메소드 추가
    • getDynamicGlobalPropertiesDTO 파라메터와 Converter.toSteemPowerFromVest 메소드 이용하여 VEST 값을 SP 값으로 변환
fun toSteemitWallet(getDynamicGlobalPropertiesDTO: GetDynamicGlobalPropertiesDTO?): SteemitWallet {
    if (null == getDynamicGlobalPropertiesDTO) {
        return toSteemitWallet()
    }

    val vestingToBeWithdrawn = try {
        to_withdraw?.toFloat() ?: 0f
    }
    catch (e: NumberFormatException) {
        0f
    }

    val floatVestingShare = vesting_shares?.removeSubstring(" VESTS")?.toFloat() ?: 0f
    val floatDelegatedVestingShare = delegated_vesting_shares?.removeSubstring(" VESTS")?.toFloat() ?: 0f
    val floatReceivedVestingShare = received_vesting_shares?.removeSubstring(" VESTS")?.toFloat() ?: 0f
    val floatEffectiveVestingShare = floatVestingShare + floatReceivedVestingShare - floatDelegatedVestingShare
    val floatVestingWithdrawRate = vesting_withdraw_rate?.removeSubstring(" VESTS")?.toFloat() ?: 0f
    val floatTotalVestingShare = getDynamicGlobalPropertiesDTO.total_vesting_shares?.removeSubstring(" VESTS")?.toFloat() ?: 0f
    val floatTotalVestingFundSteem = getDynamicGlobalPropertiesDTO.total_vesting_fund_steem?.removeSubstring(" STEEM")?.toFloat() ?: 0f

    val steemPower = Converter.toSteemPowerFromVest(
        floatVestingShare,
        floatTotalVestingShare,
        floatTotalVestingFundSteem
    )
    val effectiveSteemPower = Converter.toSteemPowerFromVest(
        floatEffectiveVestingShare,
        floatTotalVestingShare,
        floatTotalVestingFundSteem
    )
    val delegatedSteemPower = Converter.toSteemPowerFromVest(
        floatDelegatedVestingShare,
        floatTotalVestingShare,
        floatTotalVestingFundSteem
    )
    val receivedSteemPower = Converter.toSteemPowerFromVest(
        floatReceivedVestingShare,
        floatTotalVestingShare,
        floatTotalVestingFundSteem
    )
    val steemPowerWithdrawRate = Converter.toSteemPowerFromVest(
        floatVestingWithdrawRate,
        floatTotalVestingShare,
        floatTotalVestingFundSteem
    )
    val steemPowerToBeWithdrawn = Converter.toSteemPowerFromVest(
        vestingToBeWithdrawn,
        floatTotalVestingShare,
        floatTotalVestingFundSteem
    )

    return SteemitWallet(
        name ?: "",
        balance ?: "0 STEEM",
        sbd_balance ?: "0 SBD",
        savings_balance ?: "0 STEEM",
        savings_sbd_balance ?: "0 SBD",
        "${steemPower} SP",
        "${effectiveSteemPower} SP",
        "${delegatedSteemPower} SP",
        "${receivedSteemPower} SP",
        "${steemPowerWithdrawRate} SP",
        "${steemPowerToBeWithdrawn} SP"
    )
}

SteemRepositoryImpl 클래스 수정

  • readSteemitWallet 메소드에서 condenser_api.get_accounts 및 condenser_api.get_dynamic_global_properties API 모두 실행한 결과를 받고, 스팀 지갑 객체 생성시 스팀 파워를 VEST에서 SP로 변환
override fun readSteemitWallet(account: String): Single<Array<SteemitWallet>> {
    val getDynamicGlobalPropertiesParams = GetDynamicGlobalPropertiesParamsDTO(params = arrayOf(), id = 1)
    val getAccountParams = GetAccountsParamsDTO(
        params = arrayOf(arrayOf(account)),
        id = 1
    )

    return Single.zip(
        SteemClient.apiService.getDynamicGlobalProperties(getDynamicGlobalPropertiesParams),
        SteemClient.apiService.getAccounts(getAccountParams)
    ) { getDynamicGlobalPropertiesResponse, getAccountsResponseDTO ->
        val getAccountsResponseResult = getAccountsResponseDTO.result ?: arrayOf()
        when (getAccountsResponseResult.size) {
            1 -> arrayOf(
                getAccountsResponseResult[0].toSteemitWallet(
                    getDynamicGlobalPropertiesResponse.result
                )
            )
            else -> arrayOf()
        }
    }
}

GitHub Commit


지난 스팀 앱 개발기

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.029
BTC 57893.29
ETH 3130.56
USDT 1.00
SBD 2.44