Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
dapp 開発における big number の落とし穴 / Pitfalls of the ...
Search
blue planet
November 10, 2018
Technology
0
120
dapp 開発における big number の落とし穴 / Pitfalls of the big number in dapp development
イーサリアムと web3.js で dapp 開発する際の落とし穴と対応策
blue planet
November 10, 2018
Tweet
Share
More Decks by blue planet
See All by blue planet
join.me使用方法
blueplanet
0
130
rails cn
blueplanet
0
210
Sublime Text 2 プラグイン開発 - ゼロからPackageControlへ登録まで
blueplanet
5
2.1k
Other Decks in Technology
See All in Technology
Snowflake導入から1年、LayerXのデータ活用の現在 / One Year into Snowflake: How LayerX Uses Data Today
civitaspo
0
2.4k
通勤手当申請チェックエージェント開発のリアル
whisaiyo
3
460
Amazon Bedrock Knowledge Bases × メタデータ活用で実現する検証可能な RAG 設計
tomoaki25
6
2.4k
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
2
200
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
120
「もしもデータ基盤開発で『強くてニューゲーム』ができたなら今の僕はどんなデータ基盤を作っただろう」
aeonpeople
0
250
20251219 OpenIDファウンデーション・ジャパン紹介 / OpenID Foundation Japan Intro
oidfj
0
500
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
210
[2025-12-12]あの日僕が見た胡蝶の夢 〜人の夢は終わらねェ AIによるパフォーマンスチューニングのすゝめ〜
tosite
0
180
まだ間に合う! Agentic AI on AWSの現在地をやさしく一挙おさらい
minorun365
17
2.8k
AI駆動開発ライフサイクル(AI-DLC)の始め方
ryansbcho79
0
180
202512_AIoT.pdf
iotcomjpadmin
0
140
Featured
See All Featured
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
33
Agile that works and the tools we love
rasmusluckow
331
21k
Deep Space Network (abreviated)
tonyrice
0
21
Accessibility Awareness
sabderemane
0
24
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
1
22
Code Review Best Practice
trishagee
74
19k
Faster Mobile Websites
deanohume
310
31k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
17
HDC tutorial
michielstock
0
270
Prompt Engineering for Job Search
mfonobong
0
130
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
340
Transcript
DAPP 開発における BIG NUMBER の落とし⽳穴 Hi-CON 2018
⽬目次 0. ⾃自⼰己紹介 1. イーサリアムの数値 2. BigNumber ライブラリ 3. まとめ
⾃自⼰己紹介 0
4 { name: “⿂振江”, kana: “ギョシンコウ”, role: “CTO”, company: “chainbow.io”,
}
5
イーサリアムの数値 1
7 Solidity のデータ型には、⼩数型はないですよね const transaction = … const testCoin =
new web3.eth.Contract(abi, tokenAddress) const decimals = await testCoin.methods.decimals().call() const tokenValue = transaction.value / 10 ** tokenInfo.decimals console.log(tokenValue)
8 ERC20 の decimals は普通に 18 ですよね @bob: 10 TTC
送⾦金金してみたぜ! @alice: 10 TTC 来てます! @bob: 0.01 TTC 送⾦金金してみたぜ! @alice: 0.01 TTC 来てます!
9 ERC20 の decimals は普通に 18 ですよね @bob: 10 TTC
送⾦金金してみたぜ! @alice: 10 TTC 来てます! @bob: 0.01 TTC 送⾦金金してみたぜ! @alice: 1.0000000000000001e-20 TTC 来てます!
BigNumber ライブラリ 2
11 web3.utils.fromWei 使いたい Ver 0.20.7 var fromWei = function(number, unit)
{ var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit)); return isBigNumber(number) ? returnValue : returnValue.toString(10); }; https://github.com/ethereum/web3.js/blob/develop/lib/utils/utils.js#L329-L333
12 web3.utils.fromWei 使いたい Ver 0.20.7 "dependencies": { "bignumber.js": "github:frozeman/bignumber.js-nolookahead", "crypto-js":
"^3.1.4", "utf8": "^2.1.1", "xhr2-cookies": "^1.1.0", "xmlhttprequest": "*" },
13 web3.utils.fromWei 使いたい Ver 1.0.0-beta.36 var fromWei = function(number, unit)
{ unit = getUnitValue(unit); if(!utils.isBN(number) && !_.isString(number)) { throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.'); } return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10); }; https://github.com/ethereum/web3.js/blob/1.0/packages/web3-utils/src/index.js#L231-L239
14 web3.utils.fromWei 使いたい Ver 1.0.0-beta.36 "dependencies": { "bn.js": "4.11.6", "eth-lib":
"0.1.27", "ethjs-unit": "0.1.6", "number-to-bn": "1.7.0", "randomhex": "0.1.5", "underscore": "1.8.3", "utf8": "2.1.1" }
15 web3.utils.fromWei 使いたい Ver 1.0.0-beta.36 function fromWei(weiInput, unit, optionsInput) {
var wei = numberToBN(weiInput); // eslint-disable-line var negative = wei.lt(zero); // eslint-disable-line const base = getValueOfUnit(unit); const baseLength = unitMap[unit].length - 1 || 1; const options = optionsInput || {}; if (negative) { wei = wei.mul(negative1); } var fraction = wei.mod(base).toString(10); // eslint-disable-line while (fraction.length < baseLength) { fraction = `0${fraction}`; } if (!options.pad) { fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1]; // 省略 return value; } https://github.com/ethjs/ethjs-unit/blob/master/src/index.js#L83-L117
16 web3.utils.fromWei 使いたい Ver 1.0.0-beta.36 import Big from 'bignumber.js'; function
BigNumber (number, base) { return new Big(number, base); } function toDecimals (number, decimals) { return BigNumber(number).times(BigNumber(10).pow(decimals)); } function fromDecimals (number, decimals) { return BigNumber(number).div(BigNumber(10).pow(decimals)); }
まとめ 3
数字ではなく、資産になるので、慎重にやりましょう
ご清聴ありがとうございました!