Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
dapp 開発における big number の落とし穴 / Pitfalls of the ...
Search
blue planet
November 10, 2018
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
dapp 開発における big number の落とし穴 / Pitfalls of the big number in dapp development
イーサリアムと web3.js で dapp 開発する際の落とし穴と対応策
blue planet
November 10, 2018
More Decks by blue planet
See All by blue planet
join.me使用方法
blueplanet
0
140
rails cn
blueplanet
0
220
Sublime Text 2 プラグイン開発 - ゼロからPackageControlへ登録まで
blueplanet
5
2.2k
Other Decks in Technology
See All in Technology
What the customer really needed
kawaguti
PRO
3
220
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
740
事業課題から技術的負債に向き合う
sansantech
PRO
2
2.3k
Mastering Agentic Development: Harness Engineering for Effective Coding Agents
konippi
3
500
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
1
290
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
110
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
420
あけおめLINE 傾向とその対策
nasa9084
0
320
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
280
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
Goodbye ShellScript, Hello File-based App
shunsock
0
950
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
1
340
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
BBQ
matthewcrist
89
10k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
260
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Documentation Writing (for coders)
carmenintech
77
5.5k
エンジニアに許された特別な時間の終わり
watany
109
250k
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
数字ではなく、資産になるので、慎重にやりましょう
ご清聴ありがとうございました!