Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
140
[JAWSDAYS2026][D8]その起票、愛が足りてますか?AWSサポートを味方につける、技術的「ラブレター」の書き方
hirosys_
3
110
「Blue Team Labs Online」入門 - みんなで挑むログ解析バトル
v_avenger
0
130
AIエージェント時代に備える AWS Organizations とアカウント設計
kossykinto
2
590
マルチプレーンGPUネットワークを実現するシャッフルアーキテクチャの整理と考察
markunet
2
220
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
1
230
IBM Bobを使って、PostgreSQLのToDoアプリをDb2へ変換してみよう/202603_Dojo_Bob
mayumihirano
1
290
非情報系研究者へ送る Transformer入門
rishiyama
9
6.4k
型を書かないRuby開発への挑戦
riseshia
0
210
モブプログラミング再入門 ー 基本から見直す、AI時代のチーム開発の選択肢 ー / A Re-introduction of Mob Programming
takaking22
5
1k
When an innocent-looking ListOffsets Call Took Down Our Kafka Cluster
lycorptech_jp
PRO
0
120
管理者向けGitHub Enterpriseの運用Tips紹介: 人にもAIにも優しいプラットフォームづくり
yuriemori
0
180
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Accessibility Awareness
sabderemane
0
74
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Ruling the World: When Life Gets Gamed
codingconduct
0
170
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
380
The agentic SEO stack - context over prompts
schlessera
0
680
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
230
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Are puppies a ranking factor?
jonoalderson
1
3.1k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
130
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
数字ではなく、資産になるので、慎重にやりましょう
ご清聴ありがとうございました!