SlideShare a Scribd company logo
1 of 18
Download to read offline
Ethereum Dapp - Asset Exchange YOSEMITE alpha
https://yosemiteX.com
Presented on Blockchain Day blockchain tech conference, Seoul 2017.11.08
Yosemite X Inc. 1755 University Ave. Palo Alto, CA 94301
Bezalel Lim (임병완) / bezalel@yosemiteX.com
Lead Developer @ Yosemite X Inc. / Yosemite Labs.
To show 3 Ethereum Dapps made by Yosemite X Inc.
● 1st Generation “Fully Decentralized” Asset Token Exchange
Ethereum Dapp PoC (2016)
● On/Off-chain Hybrid-architecture Asset Exchange YOSEMITE alpha
Ethereum Dapp (2017) - Real-Estate, Fine Art, …
● Token Sale (ICO) Ethereum Dapp (test version)
Dapp : Decentralized application
Asset-Share Smart Contract
[Smart Contract Code]
* Share(Token) ownership ledger
account-1 : 100 share
account-2 : 150 share
* Escrow for Token and Ether
* Make Buy/Sell Order
* Take Buy/Sell Order
* Asset Acquisition Proposal
* Voting For Buy Proposal
* Dividend
...
User
Ethereum Blockchain
Asset(Art,...) Metadata,
Image Files,
Authentication-related
Document Files
...
User Account
User
User Account
MakeBuyOrder
Vote
TakeBuyOrder
Ethereum Dapp (through Mist / Geth)
MakeSellOrder
Asset Token Registry Contract
0x54106a9b4b58b300...
102.243 ETH
0x481ab76d8ab8f980...
419.107 ETH
Decentralized P2P
Storage (IPFS)
Private KeyPrivate Key
Ethereum Dapp Architecture of 1st Generation
“Fully Decentralized” Asset Token Exchange System PoC, 2016
contract AssetShareToken {
...
/// @notice making buy order (providing ether liquidity). msg.value should be equal to ...
/// @param _token The amount of token to be traded, should have 9 trailing zeros
/// @param _ethPrice The Ether price per base token unit (10^18 token), should have 9 trailing zeros
/// @param _nonce nonce value generated by client to uniquely distinguish this buy order
function makeBuyOrder(uint256 _token, uint256 _ethPrice, uint256 _nonce) payable isTradable external {
checkTrailing9Zeros(_token);
checkTrailing9Zeros(_ethPrice);
if (msg.value != safeMul(_token, _ethPrice) / (1 ether)) throw;
bytes32 makeBuyHash = sha3(this, msg.sender, _token, _ethPrice, block.timestamp, _nonce);
if (buyOrders[makeBuyHash].user != 0) throw; // check existing order (possible conflict on same block and same nonce)
buyOrders[makeBuyHash] = OrderStatus(msg.sender, false, false, _token, _ethPrice, _token, msg.value);
ethInTrade[msg.sender] = safeAdd(ethInTrade[msg.sender], msg.value);
MakeBuy(makeBuyHash, msg.sender, _token, _ethPrice, block.timestamp, _nonce);
}
...
}
Asset Token Smart Contract
User Account
MakeBuyOrder
10 token
0.5 ETH/token
escrow 50 ETH
0x54106a9b4b58b300...
102.243 ETH
Smart Contract Code Example (Ethereum Solidity)
1st Generation
“Fully Decentralized” Asset Token Exchange
Ethereum Dapp DEMO (PoC, 2016)
Ethereum Mist Browser (Ropsten TEST-NET)
http://exdappdev.artstockx.com
“Merkle Root Hash” can be used as unique identifier of underlying data (leaf data nodes)
If one bit of any leaf content node is changed, it will generate totally different merkle root hash.
Merkle Hash Examples :
blockhash of blockchain data structure, BitTorrent / IPFS file hash address
[Smart Contract]
* Asset Token Registry Database
- token-symbol : “AS_PTP”
name : “Picasso The Poet”
contract-addr : 0x2f932dc239a…
metadata-Hash: QmUxFCy7UTM5ey...
- token-symbol : “AS_RLY”
name : “...”
contract-addr: 0x…
...
Ethereum Blockchain
Ethereum Dapp (through Mist / Geth)
Asset Token Registry Contract
(addr 0x348c1d26e5e562a9910...)
Decentralized P2P Storage (IPFS)
Asset Token Registry and “Immutable” Asset Metadata
/ipfs/QmUxFCy7UTM5ey...
Metadata Json File
{
“...”:”....”,
“Images” : [“QmXMTKEFU2Qd...”,”...”,”...”],
“authDoc” : “QmcwUPgcCPy...”
}
/ipfs/QmUxFCy7UTM5ey…
Asset Image File
/ipfs/QmUxFCy7UTM5ey…
Authentication
Document File
Hybrid Exchange System Architecture with On/Off Chain Systems
Decentralized Exchange
[ EtherDelta, YOSEMITE
PoC, … ]
Centralized Exchange
[ Bithumb, Korbit, Poloniex,
Kraken, … ]
Hybrid-style Exchange
[ YOSEMITE Alpha ]
Transaction
Performance
Very Slow
Very Low Throughput
High Speed
High Throughput
High Speed
High Throughput
Blockchain Fee User pays Gas Fee (Ether) No Gas Fee No Gas Fee
Data
Transparency /
Auditability
Fully transparent /
auditable, but bloats the
blockchain
not transparent, data could
be manipulated,
Not auditable
All trading data is transparent
and auditable
User Account
Blockchain Account
(created on client-side)
Server Generated User
Account
Blockchain Account
(created on client-side)
Fiat Stable Coin - Fiat Money, USDT Fiat-Pegged Token (dUSD)
User Interface
Difficult (only blockchain
experts can use)
Easy Easy
Trading Volume Very Low Volume Most Crypto Trading -
Crypto Exchange System Comparison
contract ERC223 {
totalSupply() constant returns (uint); balanceOf(address _owner) constant returns (uint);
name() constant returns (string _name); symbol() constant returns (bytes32 _symbol);
decimals() constant returns (uint8 _decimals);
transfer(address _to, uint _value) returns (bool success);
transfer(address _to, uint _value, bytes _data) returns (bool);
event Transfer(address indexed _from, address indexed _to, uint256 indexed _value, bytes _data);
}
contract ERC223Receiver {
tokenFallback(address _from, uint _value, bytes _data);
}
Ethereum ERC20 / ERC223 Token Standard
contract ERC20 {
totalSupply() constant returns (uint totalSupply); balanceOf(address _owner) constant returns (uint);
transfer(address _to, uint _value) returns (bool); transferFrom(address _from, address _to, uint _value) returns (bool);
approve(address _spender, uint _value) returns (bool); allowance(address _owner, address _spender) constant returns (uint);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}
https://github.com/ethereum/EIPs/issues/20
https://github.com/ethereum/EIPs/issues/223
ERC223 Smart Contract
token ownership map
(ledger)
account-1 : 100.123
account-2 : 150.234
account-3 : 3242.0432
contract-1 : 21310.523
….
ERC223 Receiver
Smart Contract
if transfer target address(_to) is contract (e.g. exchange contract), then token contract calls target contract’s
tokenFallback function in which the target contract can generate its own Event Log
⇒ deposit operation in exchange contract can be done in 1 blockchain transaction and exchange system just
monitors its own exchange contract’s event logs, not for every ERC20 token contracts’ event log
call tokenFallback()
2. Crypto-signed(with Ethereum account) user’s
buy/sell order message is sent to exchange
server and written in public p2p storage
3. Server matches buy/sell orders
and make crypto-signed (with
Ethereum account of server) trade
event message and stores in
database and public p2p storage
Asset-Share Smart Contract [ERC223]
Share ownership ledger
account-1 : 100 Shares
account-2 : 150 Shares
exchange-account : 21,310 Shares
….
Off-chain Exchange Server
User
Exchange (Vault) Contract
[ERC223 receiver]
1. Deposit dUSD / Asset-Share
Public Ethereum Blockchain
Public P2P Distributed
Storage (IPFS)
Trading System
Withdraw dUSD / Asset-Share
User Account
“Fully transparent and auditable”
“High Performance”
“No Gas Fee”
“Stable Trading Currency”
dUSD (Digital USD) Smart Contract
[ERC223]
dUSD ledger
account-1 : 2,300.12 dUSD
account-2 : 870.32 dUSD
exchange-account : 17,234,321.243 dUSD
….
Bank Account
balance : $82,243,231
dUSD Server
Total supply of dUSD Token ≤ $USD Balance of Bank Account
Issue / Redeem
smart contract log data
sync.
Asset Exchange YOSEMITE Hybrid System Architecture Diagram, 2017
signedBuyOrderMsg = buyOrderMsg + ( “si” → ECDSA.Sign(PKU
,buyOrderMsg) )
where PKU
is the private key of the user account, ECDSA.Sign is signing function of the elliptic curve digital signature algorithm,
buyOrderMsg/signedBuyOrderMsg are tightly packed (no whitespace) stringified json objects
buyOrderId = MerkleRootHash(signedBuyOrderMsg) = IPFS file address
where MerkleRootHash is a base58 encoded root hash of merkle tree/dag of file data on IPFS
signedBuyOrderMsg = IPFS.Get(buyOrderId)
where IPFS.Get is a file data retrieving function using the merkle root hash address of a file on IPFS
UserEthAddress = ECDSA.Recover(buyOrderMsg, signedBuyOrderMsg("si"))
where ECDSA.Recover is public key recovering function of the elliptic curve digital signature algorithm,
buyOrderMsg = signedBuyOrderMsg -"si"
[example]
buyOrderMsg = { "xa" : "0x33e50109...119cba0a088", "tt" : "OB", "ea" : "0x38909c7...d7b25e0590" , "sy" : "AS_PC_GN", "am" : "30",
"pr" : "30500000", "mfr" : 10, "tfr" : 20, "ts" : 1500882556820 }
signedBuyOrderMsg = { "xa" : "0x33e50109...119cba0a088", "tt" : "OB", "ea" : "0x38909c7...d7b25e0590" , "sy" : "AS_PC_GN", "am"
: "30", "pr" : "30500000", "mfr" : 10, "tfr" : 20, "ts" : 1500882556820, "si" : "0xdfef1901548ec804ecfa...72a5c8909d7961c1c" }
buyOrderId = “QmQjxtDWvHVMVp...9Y3r5g5QP2nX6Kev” (IPFS hash address)
signedBuyOrderMsg = IPFS.Get(“QmQjxtDWvHVMVp...9Y3r5g5QP2nX6Kev”)
“0x38909c7...d7b25e0590” = ECDSA.Recover(buyOrderMsg,”0xdfef1901548ec804ecfa...72a5c8909d7961c1c”)
Buy Order Message Example
Ethereum Account Address
Crypto Signature
S CTBD WRS TBC
Block of Exchange TXs
Crypto-hash of block data
(block json file IPFS hash address)
previous block hash
block-chaining
Public IPFS P2P Distributed Storage
Public Ethereum Blockchain Exchange Smart Contract [ERC223 token receiver] [Exchange Block Hash Anchoring Storage]
immutable ‘Trade-Buy’ json file
with server crypto-signature
QmQ9o...6FjrtpZmz QmXhCc...v4pmkQf
‘Sell-Order’ json file
with user crypto-signature
QmYDDEq...mMc2f
‘Block’ json file
IPFS hash addr. list for
transactions in this block
Block of Exchange TXs
Crypto-hash of block data
(block json file IPFS hash address)
previous block hash
Exchange block hash anchoring to public Ethereum blockchain to ensure exchange data immutability and transparency
at regular time intervals
WC
IPFS hash addr. list for
transactions in this block
Off-chain blockchain-like exchange data structure anchored to the public blockchain
Asset Exchange YOSEMITE alpha Ethereum Dapp DEMO
http://alpha.yosemiteX.com / Chrome Web Browser / MetaMask plugin / Ethereum Rinkeby Test-net
Token Sale (ICO) Ethereum Dapp (test version)
http://tokensaletest1.yosemitelabs.org [Chrome / MetaMask] [Mist Browser] [Ethereum Rinkeby test-net]
Rinkeby Free Ether Faucet - https://faucet.rinkeby.io/
YOS Token Sale / YOS Token Smart Contract
● YOS Token Sale Contract
○ 3 round token sale logic
○ get ETH and issue YOS ERC223 tokens for ETH contributor accounts
● YOS Token Smart Contract
○ ERC20 / ERC223 Standard Token
○ Snapshotable Token (inspired by MiniMe token)
■ Token distribution(ownership ledger) can be snapshotted at the
requested snapshot points (block numbers)
■ “Upgradable” Token Contract
○ Dividendable Token
■ Can distribute token dividend (profit of YOS token, e.g.
transaction fee profit of exchange service) in proportion of the
token distribution at the dividend time point (snapshot block
number)
Snapshotable Token Contract
snapshot of token
ownership ledger at a
specific block number
account-1 : 100.123
account-2 : 150.234
account-3 : 3242.0432
….
New token contract
upgraded from previous
snapshotable token
contract
Upgrade to new smart contract
at snapshot block number
https://github.com/YosemiteLabs/token-sale-contract-dev
https://yosemiteX.com
YOSEMITE Technical White Paper
YOSEMITE Alpha Version

More Related Content

What's hot

Laporan multiclient chatting client server
Laporan multiclient chatting client serverLaporan multiclient chatting client server
Laporan multiclient chatting client servertrilestari08
 
Border Patrol - Count, throttle, kick & ban in perl
Border Patrol - Count, throttle, kick & ban in perlBorder Patrol - Count, throttle, kick & ban in perl
Border Patrol - Count, throttle, kick & ban in perlDavid Morel
 
Hands on with Smart Contracts session #3
Hands on with Smart Contracts session #3Hands on with Smart Contracts session #3
Hands on with Smart Contracts session #3Gene Leybzon
 
Ethereum hackers
Ethereum hackersEthereum hackers
Ethereum hackersgavofyork
 
"Auth for React.js APP", Nikita Galkin
"Auth for React.js APP", Nikita Galkin"Auth for React.js APP", Nikita Galkin
"Auth for React.js APP", Nikita GalkinFwdays
 
Hands on with smart contracts
Hands on with smart contractsHands on with smart contracts
Hands on with smart contractsGene Leybzon
 
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RI
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RIThe Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RI
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RIEleanor McHugh
 
Cryptography for Absolute Beginners (May 2019)
Cryptography for Absolute Beginners (May 2019)Cryptography for Absolute Beginners (May 2019)
Cryptography for Absolute Beginners (May 2019)Svetlin Nakov
 
Hands on with smart contracts 2. Presentation for the Blockchain Applications...
Hands on with smart contracts 2. Presentation for the Blockchain Applications...Hands on with smart contracts 2. Presentation for the Blockchain Applications...
Hands on with smart contracts 2. Presentation for the Blockchain Applications...Gene Leybzon
 
Abusing text/template for data transformation
Abusing text/template for data transformationAbusing text/template for data transformation
Abusing text/template for data transformationArnaud Porterie
 
Multi client
Multi clientMulti client
Multi clientAisy Cuyy
 
MultiClient chatting berbasis gambar
MultiClient chatting berbasis gambarMultiClient chatting berbasis gambar
MultiClient chatting berbasis gambaryoyomay93
 
“Create your own cryptocurrency in an hour” - Sandip Pandey
“Create your own cryptocurrency in an hour” - Sandip Pandey“Create your own cryptocurrency in an hour” - Sandip Pandey
“Create your own cryptocurrency in an hour” - Sandip PandeyEIT Digital Alumni
 
C++ Lambda and concurrency
C++ Lambda and concurrencyC++ Lambda and concurrency
C++ Lambda and concurrency명신 김
 
Smart Contracts with Solidity hands-on training session
Smart Contracts with Solidity hands-on training session  Smart Contracts with Solidity hands-on training session
Smart Contracts with Solidity hands-on training session Gene Leybzon
 

What's hot (20)

Laporan multiclient chatting client server
Laporan multiclient chatting client serverLaporan multiclient chatting client server
Laporan multiclient chatting client server
 
Border Patrol - Count, throttle, kick & ban in perl
Border Patrol - Count, throttle, kick & ban in perlBorder Patrol - Count, throttle, kick & ban in perl
Border Patrol - Count, throttle, kick & ban in perl
 
Hands on with Smart Contracts session #3
Hands on with Smart Contracts session #3Hands on with Smart Contracts session #3
Hands on with Smart Contracts session #3
 
Ethereum hackers
Ethereum hackersEthereum hackers
Ethereum hackers
 
"Auth for React.js APP", Nikita Galkin
"Auth for React.js APP", Nikita Galkin"Auth for React.js APP", Nikita Galkin
"Auth for React.js APP", Nikita Galkin
 
C++ L08-Classes Part1
C++ L08-Classes Part1C++ L08-Classes Part1
C++ L08-Classes Part1
 
Hands on with smart contracts
Hands on with smart contractsHands on with smart contracts
Hands on with smart contracts
 
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RI
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RIThe Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RI
The Ruby Guide to *nix Plumbing: on the quest for efficiency with Ruby [M|K]RI
 
Whispered secrets
Whispered secretsWhispered secrets
Whispered secrets
 
Project in programming
Project in programmingProject in programming
Project in programming
 
Cryptography for Absolute Beginners (May 2019)
Cryptography for Absolute Beginners (May 2019)Cryptography for Absolute Beginners (May 2019)
Cryptography for Absolute Beginners (May 2019)
 
Hands on with smart contracts 2. Presentation for the Blockchain Applications...
Hands on with smart contracts 2. Presentation for the Blockchain Applications...Hands on with smart contracts 2. Presentation for the Blockchain Applications...
Hands on with smart contracts 2. Presentation for the Blockchain Applications...
 
Abusing text/template for data transformation
Abusing text/template for data transformationAbusing text/template for data transformation
Abusing text/template for data transformation
 
Multi client
Multi clientMulti client
Multi client
 
MultiClient chatting berbasis gambar
MultiClient chatting berbasis gambarMultiClient chatting berbasis gambar
MultiClient chatting berbasis gambar
 
“Create your own cryptocurrency in an hour” - Sandip Pandey
“Create your own cryptocurrency in an hour” - Sandip Pandey“Create your own cryptocurrency in an hour” - Sandip Pandey
“Create your own cryptocurrency in an hour” - Sandip Pandey
 
C++ L05-Functions
C++ L05-FunctionsC++ L05-Functions
C++ L05-Functions
 
C++ Lambda and concurrency
C++ Lambda and concurrencyC++ Lambda and concurrency
C++ Lambda and concurrency
 
web3j Overview
web3j Overviewweb3j Overview
web3j Overview
 
Smart Contracts with Solidity hands-on training session
Smart Contracts with Solidity hands-on training session  Smart Contracts with Solidity hands-on training session
Smart Contracts with Solidity hands-on training session
 

Similar to BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session

以太坊代幣付款委託 @ Open Source Developer Meetup #12
以太坊代幣付款委託 @ Open Source Developer Meetup #12以太坊代幣付款委託 @ Open Source Developer Meetup #12
以太坊代幣付款委託 @ Open Source Developer Meetup #12Aludirk Wong
 
A Decompiler for Blackhain-Based Smart Contracts Bytecode
A Decompiler for Blackhain-Based Smart Contracts BytecodeA Decompiler for Blackhain-Based Smart Contracts Bytecode
A Decompiler for Blackhain-Based Smart Contracts BytecodeShakacon
 
sbt-ethereum: a terminal for the world computer
sbt-ethereum: a terminal for the world computersbt-ethereum: a terminal for the world computer
sbt-ethereum: a terminal for the world computerSteve Waldman
 
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereumDappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereumTomoaki Sato
 
Security in the blockchain
Security in the blockchainSecurity in the blockchain
Security in the blockchainBellaj Badr
 
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)Svetlin Nakov
 
Braga Blockchain - Ethereum Smart Contracts programming
Braga Blockchain - Ethereum Smart Contracts programmingBraga Blockchain - Ethereum Smart Contracts programming
Braga Blockchain - Ethereum Smart Contracts programmingEmanuel Mota
 
Blockchain, Ethereum and Business Applications
Blockchain, Ethereum and Business ApplicationsBlockchain, Ethereum and Business Applications
Blockchain, Ethereum and Business ApplicationsMatthias Zimmermann
 
Ethereum: Coding Society
Ethereum: Coding SocietyEthereum: Coding Society
Ethereum: Coding Societygavofyork
 
Building Java and Android apps on the blockchain
Building Java and Android apps on the blockchain Building Java and Android apps on the blockchain
Building Java and Android apps on the blockchain Conor Svensson
 
Building a NFT Marketplace DApp
Building a NFT Marketplace DAppBuilding a NFT Marketplace DApp
Building a NFT Marketplace DAppThanh Nguyen
 
Starkware: Account Abstraction
Starkware: Account AbstractionStarkware: Account Abstraction
Starkware: Account AbstractionTinaBregovi
 
Encode x NEAR: Technical Overview of NEAR 1
Encode x NEAR: Technical Overview of NEAR 1Encode x NEAR: Technical Overview of NEAR 1
Encode x NEAR: Technical Overview of NEAR 1KlaraOrban
 
Academic Ethereum
Academic EthereumAcademic Ethereum
Academic Ethereumgavofyork
 
Blockchain, cryptography and tokens — NYC Bar presentation
Blockchain, cryptography and tokens — NYC Bar presentationBlockchain, cryptography and tokens — NYC Bar presentation
Blockchain, cryptography and tokens — NYC Bar presentationPaperchain
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -evechiportal
 
WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor
WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor
WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor WSO2
 
Smart contracts using web3.js
Smart contracts using web3.jsSmart contracts using web3.js
Smart contracts using web3.jsFelix Crisan
 

Similar to BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session (20)

以太坊代幣付款委託 @ Open Source Developer Meetup #12
以太坊代幣付款委託 @ Open Source Developer Meetup #12以太坊代幣付款委託 @ Open Source Developer Meetup #12
以太坊代幣付款委託 @ Open Source Developer Meetup #12
 
A Decompiler for Blackhain-Based Smart Contracts Bytecode
A Decompiler for Blackhain-Based Smart Contracts BytecodeA Decompiler for Blackhain-Based Smart Contracts Bytecode
A Decompiler for Blackhain-Based Smart Contracts Bytecode
 
sbt-ethereum: a terminal for the world computer
sbt-ethereum: a terminal for the world computersbt-ethereum: a terminal for the world computer
sbt-ethereum: a terminal for the world computer
 
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereumDappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
 
Security in the blockchain
Security in the blockchainSecurity in the blockchain
Security in the blockchain
 
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)
Crypto Wallets: A Technical Perspective (Nakov at OpenFest 2018)
 
Braga Blockchain - Ethereum Smart Contracts programming
Braga Blockchain - Ethereum Smart Contracts programmingBraga Blockchain - Ethereum Smart Contracts programming
Braga Blockchain - Ethereum Smart Contracts programming
 
Blockchain, Ethereum and Business Applications
Blockchain, Ethereum and Business ApplicationsBlockchain, Ethereum and Business Applications
Blockchain, Ethereum and Business Applications
 
Ethereum: Coding Society
Ethereum: Coding SocietyEthereum: Coding Society
Ethereum: Coding Society
 
Building Java and Android apps on the blockchain
Building Java and Android apps on the blockchain Building Java and Android apps on the blockchain
Building Java and Android apps on the blockchain
 
Building a NFT Marketplace DApp
Building a NFT Marketplace DAppBuilding a NFT Marketplace DApp
Building a NFT Marketplace DApp
 
Starkware: Account Abstraction
Starkware: Account AbstractionStarkware: Account Abstraction
Starkware: Account Abstraction
 
Encode x NEAR: Technical Overview of NEAR 1
Encode x NEAR: Technical Overview of NEAR 1Encode x NEAR: Technical Overview of NEAR 1
Encode x NEAR: Technical Overview of NEAR 1
 
Ethereum
EthereumEthereum
Ethereum
 
Academic Ethereum
Academic EthereumAcademic Ethereum
Academic Ethereum
 
Blockchain, cryptography and tokens — NYC Bar presentation
Blockchain, cryptography and tokens — NYC Bar presentationBlockchain, cryptography and tokens — NYC Bar presentation
Blockchain, cryptography and tokens — NYC Bar presentation
 
Socket.io
Socket.ioSocket.io
Socket.io
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
 
WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor
WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor
WSO2 Product Release Webinar - Introducing the WSO2 Complex Event Processor
 
Smart contracts using web3.js
Smart contracts using web3.jsSmart contracts using web3.js
Smart contracts using web3.js
 

Recently uploaded

costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 

Recently uploaded (20)

costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 

BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session

  • 1. Ethereum Dapp - Asset Exchange YOSEMITE alpha https://yosemiteX.com Presented on Blockchain Day blockchain tech conference, Seoul 2017.11.08 Yosemite X Inc. 1755 University Ave. Palo Alto, CA 94301 Bezalel Lim (임병완) / bezalel@yosemiteX.com Lead Developer @ Yosemite X Inc. / Yosemite Labs.
  • 2. To show 3 Ethereum Dapps made by Yosemite X Inc. ● 1st Generation “Fully Decentralized” Asset Token Exchange Ethereum Dapp PoC (2016) ● On/Off-chain Hybrid-architecture Asset Exchange YOSEMITE alpha Ethereum Dapp (2017) - Real-Estate, Fine Art, … ● Token Sale (ICO) Ethereum Dapp (test version) Dapp : Decentralized application
  • 3. Asset-Share Smart Contract [Smart Contract Code] * Share(Token) ownership ledger account-1 : 100 share account-2 : 150 share * Escrow for Token and Ether * Make Buy/Sell Order * Take Buy/Sell Order * Asset Acquisition Proposal * Voting For Buy Proposal * Dividend ... User Ethereum Blockchain Asset(Art,...) Metadata, Image Files, Authentication-related Document Files ... User Account User User Account MakeBuyOrder Vote TakeBuyOrder Ethereum Dapp (through Mist / Geth) MakeSellOrder Asset Token Registry Contract 0x54106a9b4b58b300... 102.243 ETH 0x481ab76d8ab8f980... 419.107 ETH Decentralized P2P Storage (IPFS) Private KeyPrivate Key Ethereum Dapp Architecture of 1st Generation “Fully Decentralized” Asset Token Exchange System PoC, 2016
  • 4. contract AssetShareToken { ... /// @notice making buy order (providing ether liquidity). msg.value should be equal to ... /// @param _token The amount of token to be traded, should have 9 trailing zeros /// @param _ethPrice The Ether price per base token unit (10^18 token), should have 9 trailing zeros /// @param _nonce nonce value generated by client to uniquely distinguish this buy order function makeBuyOrder(uint256 _token, uint256 _ethPrice, uint256 _nonce) payable isTradable external { checkTrailing9Zeros(_token); checkTrailing9Zeros(_ethPrice); if (msg.value != safeMul(_token, _ethPrice) / (1 ether)) throw; bytes32 makeBuyHash = sha3(this, msg.sender, _token, _ethPrice, block.timestamp, _nonce); if (buyOrders[makeBuyHash].user != 0) throw; // check existing order (possible conflict on same block and same nonce) buyOrders[makeBuyHash] = OrderStatus(msg.sender, false, false, _token, _ethPrice, _token, msg.value); ethInTrade[msg.sender] = safeAdd(ethInTrade[msg.sender], msg.value); MakeBuy(makeBuyHash, msg.sender, _token, _ethPrice, block.timestamp, _nonce); } ... } Asset Token Smart Contract User Account MakeBuyOrder 10 token 0.5 ETH/token escrow 50 ETH 0x54106a9b4b58b300... 102.243 ETH Smart Contract Code Example (Ethereum Solidity)
  • 5. 1st Generation “Fully Decentralized” Asset Token Exchange Ethereum Dapp DEMO (PoC, 2016) Ethereum Mist Browser (Ropsten TEST-NET) http://exdappdev.artstockx.com
  • 6. “Merkle Root Hash” can be used as unique identifier of underlying data (leaf data nodes) If one bit of any leaf content node is changed, it will generate totally different merkle root hash. Merkle Hash Examples : blockhash of blockchain data structure, BitTorrent / IPFS file hash address
  • 7. [Smart Contract] * Asset Token Registry Database - token-symbol : “AS_PTP” name : “Picasso The Poet” contract-addr : 0x2f932dc239a… metadata-Hash: QmUxFCy7UTM5ey... - token-symbol : “AS_RLY” name : “...” contract-addr: 0x… ... Ethereum Blockchain Ethereum Dapp (through Mist / Geth) Asset Token Registry Contract (addr 0x348c1d26e5e562a9910...) Decentralized P2P Storage (IPFS) Asset Token Registry and “Immutable” Asset Metadata /ipfs/QmUxFCy7UTM5ey... Metadata Json File { “...”:”....”, “Images” : [“QmXMTKEFU2Qd...”,”...”,”...”], “authDoc” : “QmcwUPgcCPy...” } /ipfs/QmUxFCy7UTM5ey… Asset Image File /ipfs/QmUxFCy7UTM5ey… Authentication Document File
  • 8. Hybrid Exchange System Architecture with On/Off Chain Systems
  • 9. Decentralized Exchange [ EtherDelta, YOSEMITE PoC, … ] Centralized Exchange [ Bithumb, Korbit, Poloniex, Kraken, … ] Hybrid-style Exchange [ YOSEMITE Alpha ] Transaction Performance Very Slow Very Low Throughput High Speed High Throughput High Speed High Throughput Blockchain Fee User pays Gas Fee (Ether) No Gas Fee No Gas Fee Data Transparency / Auditability Fully transparent / auditable, but bloats the blockchain not transparent, data could be manipulated, Not auditable All trading data is transparent and auditable User Account Blockchain Account (created on client-side) Server Generated User Account Blockchain Account (created on client-side) Fiat Stable Coin - Fiat Money, USDT Fiat-Pegged Token (dUSD) User Interface Difficult (only blockchain experts can use) Easy Easy Trading Volume Very Low Volume Most Crypto Trading - Crypto Exchange System Comparison
  • 10. contract ERC223 { totalSupply() constant returns (uint); balanceOf(address _owner) constant returns (uint); name() constant returns (string _name); symbol() constant returns (bytes32 _symbol); decimals() constant returns (uint8 _decimals); transfer(address _to, uint _value) returns (bool success); transfer(address _to, uint _value, bytes _data) returns (bool); event Transfer(address indexed _from, address indexed _to, uint256 indexed _value, bytes _data); } contract ERC223Receiver { tokenFallback(address _from, uint _value, bytes _data); } Ethereum ERC20 / ERC223 Token Standard contract ERC20 { totalSupply() constant returns (uint totalSupply); balanceOf(address _owner) constant returns (uint); transfer(address _to, uint _value) returns (bool); transferFrom(address _from, address _to, uint _value) returns (bool); approve(address _spender, uint _value) returns (bool); allowance(address _owner, address _spender) constant returns (uint); event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); } https://github.com/ethereum/EIPs/issues/20 https://github.com/ethereum/EIPs/issues/223 ERC223 Smart Contract token ownership map (ledger) account-1 : 100.123 account-2 : 150.234 account-3 : 3242.0432 contract-1 : 21310.523 …. ERC223 Receiver Smart Contract if transfer target address(_to) is contract (e.g. exchange contract), then token contract calls target contract’s tokenFallback function in which the target contract can generate its own Event Log ⇒ deposit operation in exchange contract can be done in 1 blockchain transaction and exchange system just monitors its own exchange contract’s event logs, not for every ERC20 token contracts’ event log call tokenFallback()
  • 11. 2. Crypto-signed(with Ethereum account) user’s buy/sell order message is sent to exchange server and written in public p2p storage 3. Server matches buy/sell orders and make crypto-signed (with Ethereum account of server) trade event message and stores in database and public p2p storage Asset-Share Smart Contract [ERC223] Share ownership ledger account-1 : 100 Shares account-2 : 150 Shares exchange-account : 21,310 Shares …. Off-chain Exchange Server User Exchange (Vault) Contract [ERC223 receiver] 1. Deposit dUSD / Asset-Share Public Ethereum Blockchain Public P2P Distributed Storage (IPFS) Trading System Withdraw dUSD / Asset-Share User Account “Fully transparent and auditable” “High Performance” “No Gas Fee” “Stable Trading Currency” dUSD (Digital USD) Smart Contract [ERC223] dUSD ledger account-1 : 2,300.12 dUSD account-2 : 870.32 dUSD exchange-account : 17,234,321.243 dUSD …. Bank Account balance : $82,243,231 dUSD Server Total supply of dUSD Token ≤ $USD Balance of Bank Account Issue / Redeem smart contract log data sync. Asset Exchange YOSEMITE Hybrid System Architecture Diagram, 2017
  • 12. signedBuyOrderMsg = buyOrderMsg + ( “si” → ECDSA.Sign(PKU ,buyOrderMsg) ) where PKU is the private key of the user account, ECDSA.Sign is signing function of the elliptic curve digital signature algorithm, buyOrderMsg/signedBuyOrderMsg are tightly packed (no whitespace) stringified json objects buyOrderId = MerkleRootHash(signedBuyOrderMsg) = IPFS file address where MerkleRootHash is a base58 encoded root hash of merkle tree/dag of file data on IPFS signedBuyOrderMsg = IPFS.Get(buyOrderId) where IPFS.Get is a file data retrieving function using the merkle root hash address of a file on IPFS UserEthAddress = ECDSA.Recover(buyOrderMsg, signedBuyOrderMsg("si")) where ECDSA.Recover is public key recovering function of the elliptic curve digital signature algorithm, buyOrderMsg = signedBuyOrderMsg -"si" [example] buyOrderMsg = { "xa" : "0x33e50109...119cba0a088", "tt" : "OB", "ea" : "0x38909c7...d7b25e0590" , "sy" : "AS_PC_GN", "am" : "30", "pr" : "30500000", "mfr" : 10, "tfr" : 20, "ts" : 1500882556820 } signedBuyOrderMsg = { "xa" : "0x33e50109...119cba0a088", "tt" : "OB", "ea" : "0x38909c7...d7b25e0590" , "sy" : "AS_PC_GN", "am" : "30", "pr" : "30500000", "mfr" : 10, "tfr" : 20, "ts" : 1500882556820, "si" : "0xdfef1901548ec804ecfa...72a5c8909d7961c1c" } buyOrderId = “QmQjxtDWvHVMVp...9Y3r5g5QP2nX6Kev” (IPFS hash address) signedBuyOrderMsg = IPFS.Get(“QmQjxtDWvHVMVp...9Y3r5g5QP2nX6Kev”) “0x38909c7...d7b25e0590” = ECDSA.Recover(buyOrderMsg,”0xdfef1901548ec804ecfa...72a5c8909d7961c1c”) Buy Order Message Example Ethereum Account Address Crypto Signature
  • 13. S CTBD WRS TBC Block of Exchange TXs Crypto-hash of block data (block json file IPFS hash address) previous block hash block-chaining Public IPFS P2P Distributed Storage Public Ethereum Blockchain Exchange Smart Contract [ERC223 token receiver] [Exchange Block Hash Anchoring Storage] immutable ‘Trade-Buy’ json file with server crypto-signature QmQ9o...6FjrtpZmz QmXhCc...v4pmkQf ‘Sell-Order’ json file with user crypto-signature QmYDDEq...mMc2f ‘Block’ json file IPFS hash addr. list for transactions in this block Block of Exchange TXs Crypto-hash of block data (block json file IPFS hash address) previous block hash Exchange block hash anchoring to public Ethereum blockchain to ensure exchange data immutability and transparency at regular time intervals WC IPFS hash addr. list for transactions in this block Off-chain blockchain-like exchange data structure anchored to the public blockchain
  • 14. Asset Exchange YOSEMITE alpha Ethereum Dapp DEMO http://alpha.yosemiteX.com / Chrome Web Browser / MetaMask plugin / Ethereum Rinkeby Test-net
  • 15.
  • 16. Token Sale (ICO) Ethereum Dapp (test version) http://tokensaletest1.yosemitelabs.org [Chrome / MetaMask] [Mist Browser] [Ethereum Rinkeby test-net] Rinkeby Free Ether Faucet - https://faucet.rinkeby.io/
  • 17. YOS Token Sale / YOS Token Smart Contract ● YOS Token Sale Contract ○ 3 round token sale logic ○ get ETH and issue YOS ERC223 tokens for ETH contributor accounts ● YOS Token Smart Contract ○ ERC20 / ERC223 Standard Token ○ Snapshotable Token (inspired by MiniMe token) ■ Token distribution(ownership ledger) can be snapshotted at the requested snapshot points (block numbers) ■ “Upgradable” Token Contract ○ Dividendable Token ■ Can distribute token dividend (profit of YOS token, e.g. transaction fee profit of exchange service) in proportion of the token distribution at the dividend time point (snapshot block number) Snapshotable Token Contract snapshot of token ownership ledger at a specific block number account-1 : 100.123 account-2 : 150.234 account-3 : 3242.0432 …. New token contract upgraded from previous snapshotable token contract Upgrade to new smart contract at snapshot block number https://github.com/YosemiteLabs/token-sale-contract-dev
  • 18. https://yosemiteX.com YOSEMITE Technical White Paper YOSEMITE Alpha Version