diff --git a/_includes/devdoc/guide_contracts.md b/_includes/devdoc/guide_contracts.md index 07486f09..25f4028a 100644 --- a/_includes/devdoc/guide_contracts.md +++ b/_includes/devdoc/guide_contracts.md @@ -9,14 +9,13 @@ http://opensource.org/licenses/MIT. {% autocrossref %} -Contracts are -transactions which use the decentralized Bitcoin system to enforce financial -agreements. -Bitcoin contracts can often be crafted to minimize dependency on outside +Contracts are transactions which use the decentralized Dash system to enforce +financial agreements. +Dash contracts can often be crafted to minimize dependency on outside agents, such as the court system, which significantly decreases the risk -of dealing with unknown entities in financial transactions. +of dealing with unknown entities in financial transactions. -The following subsections will describe a variety of Bitcoin contracts +The following subsections will describe a variety of Dash contracts already in use. Because contracts deal with real people, not just transactions, they are framed below in story format. @@ -35,18 +34,18 @@ Charlie-the-customer wants to buy a product from Bob-the-businessman, but neither of them trusts the other person, so they use a contract to help ensure Charlie gets his merchandise and Bob gets his payment. -A simple contract could say that Charlie will spend satoshis to an +A simple contract could say that Charlie will spend duffs to an output which can only be spent if Charlie and Bob both sign the input spending it. That means Bob won't get paid unless Charlie gets his merchandise, but Charlie can't get the merchandise and keep his payment. This simple contract isn't much help if there's a dispute, so Bob and Charlie enlist the help of Alice-the-arbitrator to create an [escrow -contract][/en/glossary/escrow-contract]{:#term-escrow-contract}{:.term}. Charlie spends his satoshis +contract][/en/glossary/escrow-contract]{:#term-escrow-contract}{:.term}. Charlie spends his duffs to an output which can only be spent if two of the three people sign the input. Now Charlie can pay Bob if everything is ok, Bob can refund Charlie's money if there's a problem, or Alice can arbitrate and decide -who should get the satoshis if there's a dispute. +who should get the duffs if there's a dispute. To create a multiple-signature ([multisig][/en/glossary/multisig]{:#term-multisig}{:.term}) output, they each give the others a public key. Then Bob creates the @@ -72,18 +71,18 @@ keys provided). Bob gives the redeem script to Charlie, who checks to make sure his public key and Alice's public key are included. Then he hashes the -redeem script to create a P2SH redeem script and pays the satoshis to it. Bob +redeem script to create a P2SH redeem script and pays the duffs to it. Bob sees the payment get added to the block chain and ships the merchandise. Unfortunately, the merchandise gets slightly damaged in transit. Charlie wants a full refund, but Bob thinks a 10% refund is sufficient. They turn to Alice to resolve the issue. Alice asks for photo evidence from Charlie along with a copy of the redeem script Bob created and -Charlie checked. +Charlie checked. After looking at the evidence, Alice thinks a 40% refund is sufficient, so she creates and signs a transaction with two outputs, one that spends 60% -of the satoshis to Bob's public key and one that spends the remaining +of the duffs to Bob's public key and one that spends the remaining 40% to Charlie's public key. In the signature script Alice puts her signature @@ -116,14 +115,16 @@ validates, the two transaction outputs show up in Bob's and Charlie's wallets as spendable balances. However, if Alice created and signed a transaction neither of them would -agree to, such as spending all the satoshis to herself, Bob and Charlie -can find a new arbitrator and sign a transaction spending the satoshis +agree to, such as spending all the duffs to herself, Bob and Charlie +can find a new arbitrator and sign a transaction spending the duffs to another 2-of-3 multisig redeem script hash, this one including a public key from that second arbitrator. This means that Bob and Charlie never need to worry about their arbitrator stealing their money. + {% endautocrossref %} @@ -133,25 +134,25 @@ service interface using HTML/JavaScript on a GNU AGPL-licensed website. {% autocrossref %} +making the text or illustration more complicated --> Alice also works part-time moderating forum posts for Bob. Every time someone posts to Bob's busy forum, Alice skims the post to make sure it isn't offensive or spam. Alas, Bob often forgets to pay her, so Alice demands to be paid immediately after each post she approves or rejects. Bob says he can't do that because hundreds of small payments will cost -him thousands of satoshis in transaction fees, so Alice suggests they use a +him thousands of duffs in transaction fees, so Alice suggests they use a [micropayment channel][]{:#term-micropayment-channel}{:.term}. Bob asks Alice for her public key and then creates two transactions. -The first transaction pays 100 millibitcoins to a P2SH output whose +The first transaction pays 100 millidash to a P2SH output whose 2-of-2 multisig redeem script requires signatures from both Alice and Bob. This is the bond transaction. -Broadcasting this transaction would let Alice hold the millibitcoins +Broadcasting this transaction would let Alice hold the millidash hostage, so Bob keeps this transaction private for now and creates a second transaction. -The second transaction spends all of the first transaction's millibitcoins +The second transaction spends all of the first transaction's millidash (minus a transaction fee) back to Bob after a 24 hour delay enforced by locktime. This is the refund transaction. Bob can't sign the refund transaction by himself, so he gives it to Alice to sign, as shown in the @@ -164,7 +165,7 @@ future, signs it, and gives a copy of it back to Bob. She then asks Bob for the bond transaction and checks that the refund transaction spends the output of the bond transaction. She can now broadcast the bond transaction to the network to ensure Bob has to wait for the time lock -to expire before further spending his millibitcoins. Bob hasn't actually +to expire before further spending his millidash. Bob hasn't actually spent anything so far, except possibly a small transaction fee, and he'll be able to broadcast the refund transaction in 24 hours for a full refund. @@ -190,21 +191,22 @@ near the time lock expiry, she could be cheated out of her payment. Transaction malleability, discussed above in the Transactions section, is another reason to limit the value of micropayment channels. If someone uses transaction malleability to break the link between the -two transactions, Alice could hold Bob's 100 millibitcoins hostage even if she +two transactions, Alice could hold Bob's 100 millidash hostage even if she hadn't done any work. -For larger payments, Bitcoin transaction fees are very low as a +For larger payments, Dash transaction fees are very low as a percentage of the total transaction value, so it makes more sense to protect payments with immediately-broadcast separate transactions. -**Resource:** The [bitcoinj][] Java library +**Resource:** The [dashj][] Java library provides a complete set of micropayment functions, an example implementation, and [a -tutorial][bitcoinj micropayment tutorial] +tutorial (from bitcoinj)][bitcoinj micropayment tutorial] all under an Apache license. {% endautocrossref %} + {% endautocrossref %} diff --git a/_includes/references.md b/_includes/references.md index 15de9c22..a3c8b8f9 100644 --- a/_includes/references.md +++ b/_includes/references.md @@ -455,6 +455,7 @@ http://opensource.org/licenses/MIT. [core paymentrequest.proto]: https://github.com/dashpay/dash/blob/master/src/qt/paymentrequest.proto [core script.h]: https://github.com/dashpay/dash/blob/master/src/script/script.h [creative commons attribution 3.0 license]: https://creativecommons.org/licenses/by/3.0/ +[DashJ]: https://github.com/HashEngineering/dashj [DER]: https://en.wikipedia.org/wiki/X.690#DER_encoding [dig command]: https://en.wikipedia.org/wiki/Dig_%28Unix_command%29 [DNS A records]: http://tools.ietf.org/html/rfc1035#section-3.2.2