Latest Blog Post
Latest Ethereum News
- Web3 Design Principles – A framework of UX rules for Blockchain based Distributed Applications (part 1) 1 Apr
- Contract Storage and Upgrade in Augur and Colony 1 Apr
- The State of Ethereum Scaling, March 2018 1 Apr
- ScalingNOW! — Scaling Solution Summit Summary 1 Apr
- All videos from EthCC ’18 in Paris 1 Apr
Latest Other News
- Keep an Eye on Hangzhou: A Growing Hub for Blockchain Development 2 May
- Blockchain Lets This Startup Trade Gold That’s Still in the Ground 28 Apr
- Why All Central Banks’ E-Currencies Will Fail Horribly 28 Apr
- Bitmain Can Remotely Shut Down Your Antminer (and Everyone Else’s) 27 Apr
- The Ether Review #63 — Meet DAD, the Digital Aussie Dollar 27 Apr
Tags
- Anonymity
- Anti-Money Laundering
- Attack
- Bitcoin
- Blockchain
- Central Bank
- Consortium
- Crowdfunding
- Cryptocurrency
- Decentralisation
- Digital Currency
- Distributed Ledger
- Energy
- Enterprise
- Ethereum
- Ethereum Classic
- Exchange
- Financial Instruments
- Financial Services
- Fintech
- Golem
- Hack
- Hard Fork
- Hyperledger
- Identity
- Initial Coin Offering
- Insurance
- Internet-of-Things
- Know-Your-Client
- Monero
- Payments
- Peer-to-peer
- Physical Assets
- Privacy
- Regulation
- Scalability
- Security
- Settlements
- Smart Contract
- Source Code
- Synereo
- The DAO
- Tokens
- Wallet
- Zcash
Archives
- September 2018 (2)
- August 2018 (1)
- July 2018 (1)
- June 2018 (1)
- May 2018 (3)
- April 2018 (7)
- March 2018 (1)
- January 2018 (1)
- December 2017 (3)
- November 2017 (9)
- October 2017 (9)
- September 2017 (5)
- August 2017 (7)
- July 2017 (8)
- June 2017 (15)
- May 2017 (27)
- April 2017 (55)
- March 2017 (94)
- February 2017 (131)
- January 2017 (167)
- December 2016 (129)
- November 2016 (179)
- October 2016 (266)
- September 2016 (309)
- August 2016 (156)
- July 2016 (4)
- June 2016 (9)
- May 2016 (11)
- April 2016 (63)
Meta
Monthly Archives: February 2017
UK Giant Seeks Patent for Invention Mitigating Blockchain Attacks
UK Giant Seeks Patent for Invention Mitigating Blockchain Attacks
Leading Australian Bitcoin exchange ACX acquiring DigitalX Direct customers
Leading Australian Bitcoin exchange ACX acquiring DigitalX Direct customers. I have never heard of ACX.
Decentralized Ethereum Job Market Colony is Now in Beta
Decentralized Ethereum Job Market Colony is Now in Beta
Project Jasper: Lessons From Bank of Canada’s First Blockchain Project
Project Jasper: Lessons From Bank of Canada’s First Blockchain Project
More Chinese Exchanges Impose Bitcoin Withdrawal Delays
More Chinese Exchanges Impose Bitcoin Withdrawal Delays
Posted in Other News
Tagged Bitcoin, Cryptocurrency, Exchange, Know-Your-Client, Regulation
Leave a comment
Blockchain will change everything, but only if we can find the right talent
Blockchain will change everything, but only if we can find the right talent. Just call The BokkyPooBah!
Exploring Continuous Token Models: Towards a Million Networks of Value
Exploring Continuous Token Models: Towards a Million Networks of Value
Chinese Exchanges Suspend Withdrawals for One Month
Chinese Exchanges Suspend Withdrawals for One Month
Posted in Other News
Tagged Anti-Money Laundering, Bitcoin, Cryptocurrency, Know-Your-Client, Regulation
Leave a comment
EU Securities Watchdog: New DLT Regulations Would Be ‘Premature’
EU Securities Watchdog: New DLT Regulations Would Be ‘Premature’
Blockchain: The Invisible Technology That’s Changing the World
Blockchain: The Invisible Technology That’s Changing the World
Drugs, Code and ICOs: Monero’s Long Road to Blockchain Respect
Drugs, Code and ICOs: Monero’s Long Road to Blockchain Respect
SEC Begins Soliciting Comments On Bitcoin Investment Trust
SEC Begins Soliciting Comments On Bitcoin Investment Trust
Why Cities Will Soon Choose Digital Currency Over Fiat Money
Why Cities Will Soon Choose Digital Currency Over Fiat Money
New Bitcoin Caching Features Could Improve Block Verification
New Bitcoin Caching Features Could Improve Block Verification
Why Segwit is Important For Trezor & Other Hardware Bitcoin Wallets
Why Segwit is Important For Trezor & Other Hardware Bitcoin Wallets
New York City Law Firm Experiments with Blockchain Smart Contracts
New York City Law Firm Experiments with Blockchain Smart Contracts
Why Poker, Dating Dapps Chose Ethereum
Why Poker, Dating Dapps Chose Ethereum
Dutch Tax Authority Clarifies: Bitcoin Mixing Will Not Be Banned, But Will Raise Suspicion
Dutch Tax Authority Clarifies: Bitcoin Mixing Will Not Be Banned, But Will Raise Suspicion
Why Bitcoin Unlimited’s “Emergent Consensus” Is a Gamble
Why Bitcoin Unlimited’s “Emergent Consensus” Is a Gamble
Bitcoin Unlimited Support Overtakes SegWit For the First Time
Bitcoin Unlimited Support Overtakes SegWit For the First Time
Corda and the Distributed Ledger Technology
Corda and the Distributed Ledger Technology
Golem Protocol Part I: Decentralized Exchange for Computing
Golem Protocol Part I: Decentralized Exchange for Computing
Decentralized Capital’s Tokenised Fiat Currency. A Quick Look At The Smart Contracts
Here is Decentralized Capital’s website, their FAQ, and their Token Contracts page. Unfortunately you need to be verified to use this decentralised exchange. Here is their IDEX decentralised exchange screen: Here is their USD.DC verified smart contract deployed at 0x01a7018e6d1fde8a68d12f59b6532fb523b6259d: … Continue reading
Op Ed: Why Ethereum’s Hard Fork Will Cause Problems in the Coming Year
Op Ed: Why Ethereum’s Hard Fork Will Cause Problems in the Coming Year
FinTech Investment in China Doubled in 2016, Declines in Europe, US
FinTech Investment in China Doubled in 2016, Declines in Europe, US
Liverpool Gets Its Own Digital Currency
Liverpool Gets Its Own Digital Currency
Ethereum Payment Channels Could Enter Production in 2017
Ethereum Payment Channels Could Enter Production in 2017
Decentralized Capital’s IDEX Is Live on the Mainnet! And A Quick Look At The Smart Contract Code
IDEX Is Live on the Mainnet!. Following is the verified source code from 0x63091244180ae240c87d1f528f5f269134cb07b3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
pragma solidity ^0.4.6; contract Token { bytes32 public standard; bytes32 public name; bytes32 public symbol; uint256 public totalSupply; uint8 public decimals; bool public allowTransactions; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; function transfer(address _to, uint256 _value) returns (bool success); function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); } contract DVIP { function feeFor(address from, address to, uint256 amount) constant external returns (uint256 value); } contract Assertive { function assert(bool assertion) { if (!assertion) throw; } } contract Owned is Assertive { address internal owner; event SetOwner(address indexed previousOwner, address indexed newOwner); function Owned () { owner = msg.sender; } modifier onlyOwner { assert(msg.sender == owner); _; } function setOwner(address newOwner) onlyOwner { SetOwner(owner, newOwner); owner = newOwner; } function getOwner() returns (address out) { return owner; } } contract Math is Assertive { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } } contract ExchangeWhitelist is Math, Owned { mapping (address => mapping (address => uint256)) public tokens; //mapping of token addresses to mapping of account balances struct Account { bool authorized; uint256 tier; uint256 resetWithdrawal; uint256 withdrawn; } mapping (address => Account) public accounts; mapping (address => bool) public whitelistAdmins; mapping (address => bool) public admins; //ether balances are held in the token=0 account mapping (bytes32 => uint256) public orderFills; address public feeAccount; address public dvipAddress; address public feeMakeExporter; address public feeTakeExporter; event Order(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, uint256 expires, uint256 nonce, address user, uint8 v, bytes32 r, bytes32 s); event Cancel(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, uint256 expires, uint256 nonce, address user, uint8 v, bytes32 r, bytes32 s); event Trade(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, address get, address give, bytes32 hash); event Deposit(address token, address user, uint256 amount, uint256 balance); event Withdraw(address token, address user, uint256 amount, uint256 balance); function ExchangeWhitelist(address feeAccount_, address dvipAddress_) { feeAccount = feeAccount_; dvipAddress = dvipAddress_; feeMakeExporter = 0x00000000000000000000000000000000000000f7; feeTakeExporter = 0x00000000000000000000000000000000000000f8; } function setFeeAccount(address feeAccount_) onlyOwner { feeAccount = feeAccount_; } function setDVIP(address dvipAddress_) onlyOwner { dvipAddress = dvipAddress_; } function setAdmin(address admin, bool isAdmin) onlyOwner { admins[admin] = isAdmin; } function setWhitelister(address whitelister, bool isWhitelister) onlyOwner { whitelistAdmins[whitelister] = isWhitelister; } modifier onlyWhitelister { if (!whitelistAdmins[msg.sender]) throw; _; } modifier onlyAdmin { if (msg.sender != owner && !admins[msg.sender]) throw; _; } function setWhitelisted(address target, bool isWhitelisted) onlyWhitelister { accounts[target].authorized = isWhitelisted; } modifier onlyWhitelisted { if (!accounts[msg.sender].authorized) throw; _; } function() { throw; } function deposit(address token, uint256 amount) payable { if (token == address(0)) { tokens[address(0)][msg.sender] = safeAdd(tokens[address(0)][msg.sender], msg.value); } else { if (msg.value != 0) throw; tokens[token][msg.sender] = safeAdd(tokens[token][msg.sender], amount); if (!Token(token).transferFrom(msg.sender, this, amount)) throw; } Deposit(token, msg.sender, amount, tokens[token][msg.sender]); } function withdraw(address token, uint256 amount) { if (tokens[token][msg.sender] < amount) throw; tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount); if (token == address(0)) { if (!msg.sender.send(amount)) throw; } else { if (!Token(token).transfer(msg.sender, amount)) throw; } Withdraw(token, msg.sender, amount, tokens[token][msg.sender]); } function balanceOf(address token, address user) constant returns (uint256) { return tokens[token][user]; } uint256 internal feeTake; uint256 internal feeMake; uint256 internal feeTerm; function trade(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, uint256 expires, uint256 nonce, address user, uint8 v, bytes32 r, bytes32 s, uint256 amount) onlyWhitelisted { //amount is in amountBuy terms bytes32 hash = sha3(tokenBuy, amountBuy, tokenSell, amountSell, expires, nonce, user); if (!( ecrecover(hash,v,r,s) == user && block.number <= expires && safeAdd(orderFills[hash], amount) <= amountBuy && tokens[tokenBuy][msg.sender] >= amount && tokens[tokenSell][user] >= safeMul(amountSell, amount) / amountBuy )) throw; feeMake = DVIP(dvipAddress).feeFor(feeMakeExporter, msg.sender, 1 ether); feeTake = DVIP(dvipAddress).feeFor(feeTakeExporter, user, 1 ether); tokens[tokenBuy][msg.sender] = safeSub(tokens[tokenBuy][msg.sender], amount); feeTerm = safeMul(amount, ((1 ether) - feeMake)) / (1 ether); tokens[tokenBuy][user] = safeAdd(tokens[tokenBuy][user], feeTerm); feeTerm = safeMul(amount, feeMake) / (1 ether); tokens[tokenBuy][feeAccount] = safeAdd(tokens[tokenBuy][feeAccount], feeTerm); feeTerm = safeMul(amountSell, amount) / amountBuy; tokens[tokenSell][user] = safeSub(tokens[tokenSell][user], feeTerm); feeTerm = safeMul(safeMul(((1 ether) - feeTake), amountSell), amount) / amountBuy / (1 ether); tokens[tokenSell][msg.sender] = safeAdd(tokens[tokenSell][msg.sender], feeTerm); feeTerm = safeMul(safeMul(feeTake, amountSell), amount) / amountBuy / (1 ether); tokens[tokenSell][feeAccount] = safeAdd(tokens[tokenSell][feeAccount], feeTerm); orderFills[hash] = safeAdd(orderFills[hash], amount); Trade(tokenBuy, amount, tokenSell, amountSell * amount / amountBuy, user, msg.sender, hash); } bytes32 internal testHash; uint256 internal amountSelln; function testTrade(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, uint256 expires, uint256 nonce, address user, uint8 v, bytes32 r, bytes32 s, uint256 amount, address sender) constant returns (uint8 code) { testHash = sha3(tokenBuy, amountBuy, tokenSell, amountSell, expires, nonce, user); if (tokens[tokenBuy][sender] < amount) return 1; if (!accounts[sender].authorized) return 2; if (!accounts[user].authorized) return 3; if (ecrecover(testHash, v, r, s) != user) return 4; amountSelln = safeMul(amountSell, amount) / amountBuy; if (tokens[tokenSell][user] < amountSelln) return 5; if (block.number > expires) return 6; if (safeAdd(orderFills[testHash], amount) > amountBuy) return 7; return 0; } function cancelOrder(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, uint256 expires, uint256 nonce, uint8 v, bytes32 r, bytes32 s, address user) { bytes32 hash = sha3(tokenBuy, amountBuy, tokenSell, amountSell, expires, nonce, user); if (ecrecover(hash,v,r,s) != msg.sender) throw; orderFills[hash] = amountBuy; Cancel(tokenBuy, amountBuy, tokenSell, amountSell, expires, nonce, msg.sender, v, r, s); } } |
The difference between App Coins and Protocol Tokens
The difference between App Coins and Protocol Tokens