You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: dao/specification.adoc
+13-13Lines changed: 13 additions & 13 deletions
Original file line number
Diff line number
Diff line change
@@ -160,7 +160,7 @@ Periods are defined in block height. Each period is separated with a break of 10
160
160
161
161
- Publishing compensation requests (3630 blocks, about 25 days)
162
162
- Voting: Approve/decline compensation requests (450 blocks, about 3 days)
163
-
- Voting commitment: The voters publish the decryption key and vot on their vote data consensus (300 blocks, about 2 days)
163
+
- Voting commitment: The voters publish the decryption key and vote on their vote data consensus (300 blocks, about 2 days)
164
164
- Issuance of new BSQ (happens directly and automatically after the vote commitment is completed)
165
165
166
166
The full cycle will last 4380 blocks which is about an average month if one block takes in average 10 min. The interval of 1 month has been used in the phase zero and can be considered as practical.
@@ -200,12 +200,12 @@ The range for allowed amounts for a compensation request payout will be 50 BSQ t
200
200
201
201
* There have to be one OP_RETURN output as last output
202
202
* The amount at the OP_RETURN output has to be 0
203
-
* The first byte in the OP_RETURN data need to be the type byte: 0x01
204
-
* The second byte in the OP_RETURN data need to match the nodes version byte: 0x01 (requests made with older versions are invalid)
203
+
* The first byte in the OP_RETURN data needs to be the type byte: 0x01
204
+
* The second byte in the OP_RETURN data needs to match the nodes version byte: 0x01 (requests made with older versions are invalid)
205
205
* Size of OP_RETURN data is 22 bytes
206
206
* There has to be a BSQ input for the fee payment
207
207
* BSQ used for fee need to be mature
208
-
* The fee need to match the fee defined for that cycle (can be changed by voting at each new cycle)
208
+
* The fee needs to match the fee defined for that cycle (can be changed by voting at each new cycle)
209
209
* The block height must be in the correct period
210
210
* It needs to have at least one output to the address defined in the compensation request data
211
211
@@ -221,8 +221,8 @@ Contributors need to have the latest version installed when doing a request to b
221
221
* Output 4 (last): OP_RETURN data as defined above
222
222
* Mining fee: 0.00050000 (0.00049900 BTC from input 2 + 0.00000100 BTC or 1 BSQ from input 1)
223
223
224
-
The input 1 need to be larger than the fee so we enforce a BSQ change output (output 1). All outputs must not be smaller than the dust limit (2730 Satoshi). We require that the BSQ change is at input 0 and mandatory to have a clearly defined output index for the issuance output. The BSQ change output cannot be after the issuance output as that is interpreted as BTC as long it got not successfully voted.
225
-
The BTC input at input 2 need to be at least the sum of the requested BSQ and the miner fee, in our case 0.00500000 BTC (requested BSQ) + 0.00049900 BTC miner fee.
224
+
The input 1 needs to be larger than the fee so we enforce a BSQ change output (output 1). All outputs must not be smaller than the dust limit (2730 Satoshi). We require that the BSQ change is at input 0 and mandatory to have a clearly defined output index for the issuance output. The BSQ change output cannot be after the issuance output as that is interpreted as BTC as long it got not successfully voted.
225
+
The BTC input at input 2 needs to be at least the sum of the requested BSQ and the miner fee, in our case 0.00500000 BTC (requested BSQ) + 0.00049900 BTC miner fee.
226
226
Please note that the output 2 is at request time interpreted as BTC. Only after the request got accepted by voting the output will get interpreted as BSQ and thus the requester has issued himself BSQ.
227
227
228
228
==== Voting
@@ -268,13 +268,13 @@ To avoid an attack scenario where the malicious voter could try to disrupt the c
268
268
269
269
* There have to be one OP_RETURN output as last output
270
270
* The amount at the OP_RETURN output has to be 0
271
-
* The first byte in the OP_RETURN data need to be the: 0x02 (type)
272
-
* The second byte in the OP_RETURN data need to match the nodes version byte: 0x01 (votes made with older versions are invalid)
271
+
* The first byte in the OP_RETURN data needs to be the: 0x02 (type)
272
+
* The second byte in the OP_RETURN data needs to match the nodes version byte: 0x01 (votes made with older versions are invalid)
273
273
* Size of OP_RETURN data needs to be 22 bytes
274
274
* There have to be a BSQ input for the fee payment
275
275
* BSQ used for fee need to be mature
276
276
* There have to be exactly 1 BSQ output for the voting weight
277
-
* The fee need to match the fee defined for that cycle (can be changed by voting at each new cycle)
277
+
* The fee needs to match the fee defined for that cycle (can be changed by voting at each new cycle)
278
278
* The block height must be in the correct period
279
279
280
280
Contributors need to have the latest version installed when participating in voting to be sure to have the same version as the verification nodes.
@@ -324,9 +324,9 @@ After the vote reveal period and the following break has ended all the compensat
324
324
- Verification rules for the issuance transaction
325
325
326
326
* The BSQ output is equal to that what has been defined in the compensation request
327
-
* The issuance amount need to be in the range of the min. and max. allowed amount
327
+
* The issuance amount needs to be in the range of the min. and max. allowed amount
328
328
* The block height must have been in the correct compensation request period
329
-
* The compensation request need to be accepted in the voting process
329
+
* The compensation request needs to be accepted in the voting process
330
330
331
331
===== Scenarios for gaming the voting process
332
332
@@ -351,11 +351,11 @@ Both need to fulfill basic requirements (availability, quality of work,...). If
351
351
352
352
==== Lockup process
353
353
354
-
To register as mediator or arbitrator one need to send the required amount of BSQ to an own BSQ address. This special transaction contains OP_RETURN data which are marking that transaction as lockup transaction (OP_RETURN type 0x04). Any spend transaction from this address would render the BSQ invalid as the only valid process to unlock those funds is to use the unlock transaction.
354
+
To register as mediator or arbitrator one needs to send the required amount of BSQ to an own BSQ address. This special transaction contains OP_RETURN data which are marking that transaction as lockup transaction (OP_RETURN type 0x04). Any spend transaction from this address would render the BSQ invalid as the only valid process to unlock those funds is to use the unlock transaction.
355
355
356
356
==== Unlock process
357
357
358
-
To unlock the funds he makes another transaction to himself with other OP_RETURN data (OP_RETURN type 0x05) which marks that transaction as an unlock request and will become available for spending after the lock time is over. The unlocking period is about 2 months (9000 blocks). The delay for unlocking is required to give the community enough time to act in case of abuse to prepare the steps for a possible confiscation. Therefore the lock period need to be rather long.
358
+
To unlock the funds he makes another transaction to himself with other OP_RETURN data (OP_RETURN type 0x05) which marks that transaction as an unlock request and will become available for spending after the lock time is over. The unlocking period is about 2 months (9000 blocks). The delay for unlocking is required to give the community enough time to act in case of abuse to prepare the steps for a possible confiscation. Therefore the lock period needs to be rather long.
Copy file name to clipboardExpand all lines: exchange/howto/run-seednode.adoc
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@ But more critical is that if a node has bad connectivity it might miss messages
19
19
20
20
The seed node addresses (onion address) are hard coded in the application but can be overruled if the user adds a seed node address as program argument. Any user can run therefor their own seed node and connect to it.
21
21
22
-
Some contributors of Bisq are running the default seed nodes which are hard coded in the application. It requires a to set up a bond in BSQ to get the privilege to run a default seed node and it requires that a certain quality of service is met. The node need to support at least 30 connections.
22
+
Some contributors of Bisq are running the default seed nodes which are hard coded in the application. It requires a to set up a bond in BSQ to get the privilege to run a default seed node and it requires that a certain quality of service is met. The node needs to support at least 30 connections.
23
23
24
24
Contributors running a seed node will file a compensation request each month and get paid a fixed amount of BSQ for it if node availability was as expected.
25
25
@@ -30,7 +30,7 @@ _Side note: The seed nodes on Linux get a out of memory error after running a fe
30
30
31
31
=== Duties of the seed node operator
32
32
33
-
The operator of a seed node need to be responsive in case of seed node software updates as well to OS updates. If there are connectivity issues he need to investigate and if required upgrade his server (RAM, CPU). We recommend 2-4 GB of RAM for one seed node to allow 30 connections. He should check the error logs and the node log file (in the data directory) occasionally. He has to have a professional level of operational security to operate the node.
33
+
The operator of a seed node needs to be responsive in case of seed node software updates as well to OS updates. If there are connectivity issues he needs to investigate and if required upgrade his server (RAM, CPU). We recommend 2-4 GB of RAM for one seed node to allow 30 connections. He should check the error logs and the node log file (in the data directory) occasionally. He has to have a professional level of operational security to operate the node.
34
34
Operators need to subscribe to the Bisq Slack channel 'seednode' and act if their node reports errors.
Copy file name to clipboardExpand all lines: manual-dispute-payout.adoc
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -42,7 +42,7 @@ P2SHMultiSigOutputScript:
42
42
43
43
=== Step 1. Review dispute details
44
44
45
-
In `Support > Aribtrator's support tickets`, find the trade dispute in question, select it, and *review the closing chat message to determine who was the "winner" of the dispute*, i.e. who was supposed to have received the trading amount payout. For example, the closing comments on the dispute below make it clear that it was the seller who won the dispute:
45
+
In `Support > Arbitrator's support tickets`, find the trade dispute in question, select it, and *review the closing chat message to determine who was the "winner" of the dispute*, i.e. who was supposed to have received the trading amount payout. For example, the closing comments on the dispute below make it clear that it was the seller who won the dispute:
46
46
47
47
image:images/determine-winner.png[determining who was the winner]
Copy file name to clipboardExpand all lines: payment-account-age-witness.adoc
+5-5Lines changed: 5 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -109,15 +109,15 @@ The offer maker will add the hash used in the AccountAgeWitness object to his of
109
109
110
110
=== Verification
111
111
112
-
When a trader takes an offer both users are exchanging in the trade process the signature of data defined by the other peer (for taker we use the offer ID, for maker we use the takers preparedDepositTx - we use that data like a nonce for the signature), the pubKey, the salt and the peers local date. With that data the other peer can verify that the other trader is the owner of the AccountAgeWitness data (as the pugKey is part of the hash and the signature gets verified with pubKey and predefined input data) and that the hash is matching the account data used for the trade. As the date of both users will differ at least sightly we exchange the peers local date and use that for calculating the age and trade limit. The date need to be inside a 1 day tolerance otherwise the trade fails. That way we avoid problems with corner cases when the age just enters the next level for one peer but the verifying peer might get another result because of time differences. Any violation of those rules would lead to a failed trade.
112
+
When a trader takes an offer both users are exchanging in the trade process the signature of data defined by the other peer (for taker we use the offer ID, for maker we use the takers preparedDepositTx - we use that data like a nonce for the signature), the pubKey, the salt and the peer's local date. With that data the other peer can verify that the other trader is the owner of the AccountAgeWitness data (as the pugKey is part of the hash and the signature gets verified with pubKey and predefined input data) and that the hash is matching the account data used for the trade. As the date of both users will differ at least slightly we exchange the peer's local date and use that for calculating the age and trade limit. The date needs to be inside a 1 day tolerance otherwise the trade fails. That way we avoid problems with corner cases when the age just enters the next level for one peer but the verifying peer might get another result because of time differences. Any violation of those rules would lead to a failed trade.
113
113
114
114
115
115
==== Verification steps
116
116
1. Check if witness date is after release date for that feature (v. 0.6)
117
-
2. Check if peers date is inside 1 day tolerance window
117
+
2. Check if peer's date is inside 1 day tolerance window
118
118
3. Verify if witness hash matches hash created from the data delivered by peer (ageWitnessInputData, salt, pubKey)
119
-
4. Check if peers trade limit calculated with its account age is not lower than the trade amount.
120
-
5. Verify if signature of the predefined input data (offer ID or preparedDepositTx) is correct using the peers pubKey.
119
+
4. Check if peer's trade limit calculated with its account age is not lower than the trade amount.
120
+
5. Verify if signature of the predefined input data (offer ID or preparedDepositTx) is correct using the peer's pubKey.
121
121
122
122
123
123
NOTE: By using offer ID and preparedDepositTx for the nonce we avoid the need for a challenge protocol. We have chosen data which are defined by the other peer so they cannot be manipulated.
@@ -134,7 +134,7 @@ We need to be sure that the date of the trade in the AccountAgeWitness object ca
134
134
135
135
A more advanced fraud approach would be an attempt of hijacking someone else's AccountAgeWitness and payment account to gain the benefit of an already aged account.
136
136
137
-
A malicious trader could make a trade with someone who has already an old account and takes the account data of that trader to use it for an own account. That fake account can only be used for buying BTC because for selling he would not receive the Fiat money but the user from where he has "stolen" the data. Because he has traded with the peer he has received all the relevant data for the verification like the salt and the pubKey. To protect against such a hijacking attempt we use the peers signature to verify ownership of the AccountAgeWitness data. Without the private key the fraudster cannot create a correct signature matching the pubKey and input data. The public key is used for the hash in the AccountAgeWitness so he cannot alter that. The signed data is defined by the other peer and different for each trade so he has no chance to use data where he knows already the signature.
137
+
A malicious trader could make a trade with someone who has already an old account and takes the account data of that trader to use it for an own account. That fake account can only be used for buying BTC because for selling he would not receive the Fiat money but the user from where he has "stolen" the data. Because he has traded with the peer he has received all the relevant data for the verification like the salt and the pubKey. To protect against such a hijacking attempt we use the peer's signature to verify ownership of the AccountAgeWitness data. Without the private key the fraudster cannot create a correct signature matching the pubKey and input data. The public key is used for the hash in the AccountAgeWitness so he cannot alter that. The signed data is defined by the other peer and different for each trade so he has no chance to use data where he knows already the signature.
0 commit comments