Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add signature to dispute result and various other improvements #4543

Merged
merged 42 commits into from Sep 25, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
4f1cbbd
Add check for refund agent if donation address is valid
chimp1984 Sep 11, 2020
2b04338
Dont allow opening refudn agent dispute if delayed payout tx is invalid.
chimp1984 Sep 11, 2020
c48abbf
Improve address validation code
chimp1984 Sep 11, 2020
d82631f
Fix some issues found during testing
chimp1984 Sep 12, 2020
677211b
Allow close dispute for refund agent without payout
chimp1984 Sep 12, 2020
08fb596
Call validatePayoutTx only after trades are initialized
chimp1984 Sep 12, 2020
05e1039
Call validatePayoutTx only after trades are initialized
chimp1984 Sep 12, 2020
7ac6e71
Dispute agent sign summary. Add tool for verification
chimp1984 Sep 12, 2020
559028e
Remove unused var
chimp1984 Sep 12, 2020
48066ae
Remove setting of pubKey as it is not needed
chimp1984 Sep 12, 2020
0c46e7d
Add more data to summary msg
chimp1984 Sep 12, 2020
de4fb17
Improve summary notes
chimp1984 Sep 13, 2020
966b22a
Fix line breaks
chimp1984 Sep 13, 2020
29f3a7c
Merge branch 'master_upstream' into allow-refund-agent-close-without-…
chimp1984 Sep 17, 2020
b0b4334
Merge branch 'master_upstream' into dispute-agents-sign-summary
chimp1984 Sep 17, 2020
1c0bef7
Merge branch 'master_upstream' into verify-donation-address-for-refun…
chimp1984 Sep 17, 2020
1c41db4
Fix wrong handling of mainnet RECIPIENT_BTC_ADDRESSes
chimp1984 Sep 17, 2020
3d4427c
Add result of filter match. Add more filter data (tx ids, json)
chimp1984 Sep 17, 2020
45cee2a
Add check for disputes with duplicated trade ID or payout tx ids
chimp1984 Sep 18, 2020
f46a991
Merge branch 'dispute-agents-sign-summary' into dispute-agent-branch
chimp1984 Sep 18, 2020
b2a9262
Merge branch 'verify-donation-address-for-refund-agent' into dispute-…
chimp1984 Sep 18, 2020
c1850cb
Merge branch 'master_upstream' into dispute-agent-branch
chimp1984 Sep 20, 2020
3293047
Set agentsUid to new uuid in case it is null from persisted data
chimp1984 Sep 20, 2020
d31deff
Remove dev log
chimp1984 Sep 20, 2020
25bc616
Add check for multiple deposit txs
chimp1984 Sep 20, 2020
4878a10
Optimize testIfDisputeTriesReplay methods to avoid that maps get crea…
chimp1984 Sep 20, 2020
c6778d6
Add copy to csv data button to report screen
chimp1984 Sep 21, 2020
72dca0b
Add cylce index
chimp1984 Sep 21, 2020
2943316
Remove agentsUid from protobuf, rename to uid
chimp1984 Sep 21, 2020
30e9add
Refactor: rename DelayedPayoutTxValidation to TradeDataValidation
chimp1984 Sep 21, 2020
3206c62
Refactor: Move RegexValidator from bisq.desktop.util.validation to bi…
chimp1984 Sep 21, 2020
987bf49
Add node address validation
chimp1984 Sep 21, 2020
baa915f
Add validateNodeAddress at onOpenNewDisputeMessage
chimp1984 Sep 21, 2020
d52199e
Merge branch 'refactor-regexvalidator' into dispute-agent-branch
chimp1984 Sep 21, 2020
c7a3f95
Rename filterString to filterTerm
chimp1984 Sep 21, 2020
76c8263
Ignore onion address validation for localhost
chimp1984 Sep 21, 2020
a9f1062
Move validation after adding dispute to list
chimp1984 Sep 21, 2020
81bea14
Show popup to peer who accepted mediators suggestion once locktime is…
chimp1984 Sep 21, 2020
f37446b
Change log level
chimp1984 Sep 25, 2020
8ac468d
Commit to trigger travis as it got stuck...
chimp1984 Sep 25, 2020
25c4b4d
Merge branch 'master_upstream' into dispute-agent-branch
chimp1984 Sep 25, 2020
423cc71
Add changes from merge conflict (class was renamed)
chimp1984 Sep 25, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 7 additions & 7 deletions apitest/scripts/mainnet-test.sh
Expand Up @@ -48,14 +48,14 @@
run ./bisq-cli --password="xyz" getversion
[ "$status" -eq 0 ]
echo "actual output: $output" >&2
[ "$output" = "1.3.8" ]
[ "$output" = "1.3.9" ]
}

@test "test getversion" {
run ./bisq-cli --password=xyz getversion
[ "$status" -eq 0 ]
echo "actual output: $output" >&2
[ "$output" = "1.3.8" ]
[ "$output" = "1.3.9" ]
}

@test "test setwalletpassword \"a b c\"" {
Expand Down Expand Up @@ -166,15 +166,15 @@
[ "$output" = "Error: address bogus not found in wallet" ]
}

@test "test createpaymentacct PerfectMoneyDummy (missing nbr, ccy params)" {
run ./bisq-cli --password=xyz createpaymentacct PerfectMoneyDummy
@test "test createpaymentacct PerfectMoneyDummy (missing name, nbr, ccy params)" {
run ./bisq-cli --password=xyz createpaymentacct PERFECT_MONEY
[ "$status" -eq 1 ]
echo "actual output: $output" >&2
[ "$output" = "Error: incorrect parameter count, expecting account name, account number, currency code" ]
[ "$output" = "Error: incorrect parameter count, expecting payment method id, account name, account number, currency code" ]
}

@test "test createpaymentacct PerfectMoneyDummy 0123456789 USD" {
run ./bisq-cli --password=xyz createpaymentacct PerfectMoneyDummy 0123456789 USD
@test "test createpaymentacct PERFECT_MONEY PerfectMoneyDummy 0123456789 USD" {
run ./bisq-cli --password=xyz createpaymentacct PERFECT_MONEY PerfectMoneyDummy 0123456789 USD
[ "$status" -eq 0 ]
}

Expand Down
7 changes: 6 additions & 1 deletion apitest/src/main/java/bisq/apitest/Scaffold.java
Expand Up @@ -41,6 +41,7 @@

import javax.annotation.Nullable;

import static bisq.apitest.Scaffold.BitcoinCoreApp.bitcoind;
import static bisq.apitest.config.BisqAppConfig.*;
import static java.lang.String.format;
import static java.lang.System.exit;
Expand All @@ -64,6 +65,10 @@ public class Scaffold {
public static final int EXIT_SUCCESS = 0;
public static final int EXIT_FAILURE = 1;

public enum BitcoinCoreApp {
bitcoind
}

public final ApiTestConfig config;

@Nullable
Expand Down Expand Up @@ -295,7 +300,7 @@ private void startBackgroundProcesses(ExecutorService executor,

log.info("Starting supporting apps {}", config.supportingApps.toString());

if (config.hasSupportingApp("bitcoind")) {
if (config.hasSupportingApp(bitcoind.name())) {
BitcoinDaemon bitcoinDaemon = new BitcoinDaemon(config);
bitcoinDaemon.verifyBitcoinPathsExist(true);
bitcoindTask = new SetupTask(bitcoinDaemon, countdownLatch);
Expand Down
12 changes: 10 additions & 2 deletions apitest/src/test/java/bisq/apitest/ApiTestCase.java
Expand Up @@ -24,7 +24,9 @@
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;

import static java.util.Arrays.stream;
import static java.util.concurrent.TimeUnit.MILLISECONDS;


Expand Down Expand Up @@ -68,15 +70,21 @@ public class ApiTestCase {
// gRPC service stubs are used by method & scenario tests, but not e2e tests.
private static final Map<BisqAppConfig, GrpcStubs> grpcStubsCache = new HashMap<>();

public static void setUpScaffold(String supportingApps)
public static void setUpScaffold(Enum<?>... supportingApps)
throws InterruptedException, ExecutionException, IOException {
scaffold = new Scaffold(supportingApps).setUp();
scaffold = new Scaffold(stream(supportingApps).map(Enum::name)
.collect(Collectors.joining(",")))
.setUp();
config = scaffold.config;
bitcoinCli = new BitcoinCliHelper((config));
}

public static void setUpScaffold(String[] params)
throws InterruptedException, ExecutionException, IOException {
// Test cases needing to pass more than just an ApiTestConfig
// --supportingApps option will use this setup method, but the
// --supportingApps option will need to be passed too, with its comma
// delimited app list value, e.g., "bitcoind,seednode,arbdaemon".
scaffold = new Scaffold(params).setUp();
config = scaffold.config;
}
Expand Down
Expand Up @@ -27,7 +27,9 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

import static bisq.apitest.Scaffold.BitcoinCoreApp.bitcoind;
import static bisq.apitest.config.BisqAppConfig.alicedaemon;
import static bisq.apitest.config.BisqAppConfig.seednode;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
Expand All @@ -41,7 +43,7 @@ public class GetBalanceTest extends MethodTest {
@BeforeAll
public static void setUp() {
try {
setUpScaffold("bitcoind,seednode,alicedaemon");
setUpScaffold(bitcoind, seednode, alicedaemon);

// Have to generate 1 regtest block for alice's wallet to show 10 BTC balance.
bitcoinCli.generateBlocks(1);
Expand Down
Expand Up @@ -41,7 +41,7 @@ public class GetVersionTest extends MethodTest {
@BeforeAll
public static void setUp() {
try {
setUpScaffold(alicedaemon.name());
setUpScaffold(alicedaemon);
} catch (Exception ex) {
fail(ex);
}
Expand Down
Expand Up @@ -29,7 +29,9 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

import static bisq.apitest.Scaffold.BitcoinCoreApp.bitcoind;
import static bisq.apitest.config.BisqAppConfig.arbdaemon;
import static bisq.apitest.config.BisqAppConfig.seednode;
import static bisq.common.app.DevEnv.DEV_PRIVILEGE_PRIV_KEY;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
Expand All @@ -42,10 +44,14 @@
@TestMethodOrder(OrderAnnotation.class)
public class RegisterDisputeAgentsTest extends MethodTest {

private static final String ARBITRATOR = "arbitrator";
private static final String MEDIATOR = "mediator";
private static final String REFUNDAGENT = "refundagent";

@BeforeAll
public static void setUp() {
try {
setUpScaffold("bitcoind,seednode,arbdaemon");
setUpScaffold(bitcoind, seednode, arbdaemon);
} catch (Exception ex) {
fail(ex);
}
Expand All @@ -55,7 +61,7 @@ public static void setUp() {
@Order(1)
public void testRegisterArbitratorShouldThrowException() {
var req =
createRegisterDisputeAgentRequest("arbitrator");
createRegisterDisputeAgentRequest(ARBITRATOR);
Throwable exception = assertThrows(StatusRuntimeException.class, () ->
grpcStubs(arbdaemon).disputeAgentsService.registerDisputeAgent(req));
assertEquals("INVALID_ARGUMENT: arbitrators must be registered in a Bisq UI",
Expand All @@ -77,7 +83,7 @@ public void testInvalidDisputeAgentTypeArgShouldThrowException() {
@Order(3)
public void testInvalidRegistrationKeyArgShouldThrowException() {
var req = RegisterDisputeAgentRequest.newBuilder()
.setDisputeAgentType("refundagent")
.setDisputeAgentType(REFUNDAGENT)
.setRegistrationKey("invalid" + DEV_PRIVILEGE_PRIV_KEY).build();
Throwable exception = assertThrows(StatusRuntimeException.class, () ->
grpcStubs(arbdaemon).disputeAgentsService.registerDisputeAgent(req));
Expand All @@ -89,15 +95,15 @@ public void testInvalidRegistrationKeyArgShouldThrowException() {
@Order(4)
public void testRegisterMediator() {
var req =
createRegisterDisputeAgentRequest("mediator");
createRegisterDisputeAgentRequest(MEDIATOR);
grpcStubs(arbdaemon).disputeAgentsService.registerDisputeAgent(req);
}

@Test
@Order(5)
public void testRegisterRefundAgent() {
var req =
createRegisterDisputeAgentRequest("refundagent");
createRegisterDisputeAgentRequest(REFUNDAGENT);
grpcStubs(arbdaemon).disputeAgentsService.registerDisputeAgent(req);
}

Expand Down
Expand Up @@ -25,7 +25,7 @@ public class WalletProtectionTest extends MethodTest {
@BeforeAll
public static void setUp() {
try {
setUpScaffold(alicedaemon.name());
setUpScaffold(alicedaemon);
MILLISECONDS.sleep(2000);
} catch (Exception ex) {
fail(ex);
Expand Down
Expand Up @@ -26,7 +26,9 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

import static bisq.apitest.Scaffold.BitcoinCoreApp.bitcoind;
import static bisq.apitest.config.BisqAppConfig.alicedaemon;
import static bisq.apitest.config.BisqAppConfig.seednode;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
Expand All @@ -38,7 +40,7 @@ public class FundWalletScenarioTest extends ScenarioTest {
@BeforeAll
public static void setUp() {
try {
setUpScaffold("bitcoind,seednode,alicedaemon");
setUpScaffold(bitcoind, seednode, alicedaemon);
bitcoinCli.generateBlocks(1);
MILLISECONDS.sleep(1500);
} catch (Exception ex) {
Expand Down
Expand Up @@ -23,21 +23,21 @@
import org.bitcoinj.params.MainNetParams;

/**
* {@link AddressValidator} for Base58-encoded Bitcoin addresses.
* {@link AddressValidator} for Base58-encoded addresses.
*
* @author Chris Beams
* @since 0.7.0
* @see org.bitcoinj.core.LegacyAddress#fromBase58(NetworkParameters, String)
*/
public class Base58BitcoinAddressValidator implements AddressValidator {
public class Base58AddressValidator implements AddressValidator {

private final NetworkParameters networkParameters;

public Base58BitcoinAddressValidator() {
public Base58AddressValidator() {
this(MainNetParams.get());
}

public Base58BitcoinAddressValidator(NetworkParameters networkParameters) {
public Base58AddressValidator(NetworkParameters networkParameters) {
this.networkParameters = networkParameters;
}

Expand Down
52 changes: 52 additions & 0 deletions assets/src/main/java/bisq/asset/BitcoinAddressValidator.java
@@ -0,0 +1,52 @@
/*
* This file is part of Bisq.
*
* Bisq is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* Bisq is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
* License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Bisq. If not, see <http://www.gnu.org/licenses/>.
*/

package bisq.asset;

import org.bitcoinj.core.Address;
import org.bitcoinj.core.AddressFormatException;
import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.params.MainNetParams;

/**
* {@link AddressValidator} for Bitcoin addresses.
*
* @author Oscar Guindzberg
*/
public class BitcoinAddressValidator implements AddressValidator {

private final NetworkParameters networkParameters;

public BitcoinAddressValidator() {
this(MainNetParams.get());
}

public BitcoinAddressValidator(NetworkParameters networkParameters) {
this.networkParameters = networkParameters;
}

@Override
public AddressValidationResult validate(String address) {
try {
Address.fromString(networkParameters, address);
} catch (AddressFormatException ex) {
return AddressValidationResult.invalidAddress(ex);
}

return AddressValidationResult.validAddress();
}
}
4 changes: 2 additions & 2 deletions assets/src/main/java/bisq/asset/coins/Actinium.java
Expand Up @@ -17,14 +17,14 @@

package bisq.asset.coins;

import bisq.asset.Base58BitcoinAddressValidator;
import bisq.asset.Base58AddressValidator;
import bisq.asset.Coin;
import bisq.asset.NetworkParametersAdapter;

public class Actinium extends Coin {

public Actinium() {
super("Actinium", "ACM", new Base58BitcoinAddressValidator(new ActiniumParams()));
super("Actinium", "ACM", new Base58AddressValidator(new ActiniumParams()));
}


Expand Down
4 changes: 2 additions & 2 deletions assets/src/main/java/bisq/asset/coins/Adeptio.java
Expand Up @@ -18,7 +18,7 @@
package bisq.asset.coins;

import bisq.asset.AddressValidationResult;
import bisq.asset.Base58BitcoinAddressValidator;
import bisq.asset.Base58AddressValidator;
import bisq.asset.Coin;
import bisq.asset.NetworkParametersAdapter;

Expand All @@ -29,7 +29,7 @@ public Adeptio() {
}


public static class AdeptioAddressValidator extends Base58BitcoinAddressValidator {
public static class AdeptioAddressValidator extends Base58AddressValidator {

public AdeptioAddressValidator() {
super(new AdeptioParams());
Expand Down
4 changes: 2 additions & 2 deletions assets/src/main/java/bisq/asset/coins/Animecoin.java
Expand Up @@ -17,13 +17,13 @@

package bisq.asset.coins;

import bisq.asset.Base58BitcoinAddressValidator;
import bisq.asset.Base58AddressValidator;
import bisq.asset.Coin;
import bisq.asset.NetworkParametersAdapter;

public class Animecoin extends Coin {
public Animecoin() {
super("Animecoin", "ANI", new Base58BitcoinAddressValidator(new AnimecoinMainNetParams()));
super("Animecoin", "ANI", new Base58AddressValidator(new AnimecoinMainNetParams()));
}

public static class AnimecoinMainNetParams extends NetworkParametersAdapter {
Expand Down
4 changes: 2 additions & 2 deletions assets/src/main/java/bisq/asset/coins/Australiacash.java
Expand Up @@ -17,13 +17,13 @@

package bisq.asset.coins;

import bisq.asset.Base58BitcoinAddressValidator;
import bisq.asset.Base58AddressValidator;
import bisq.asset.Coin;
import bisq.asset.NetworkParametersAdapter;

public class Australiacash extends Coin {
public Australiacash() {
super("Australiacash", "AUS", new Base58BitcoinAddressValidator(new AustraliacashParams()));
super("Australiacash", "AUS", new Base58AddressValidator(new AustraliacashParams()));
}
public static class AustraliacashParams extends NetworkParametersAdapter {

Expand Down
4 changes: 2 additions & 2 deletions assets/src/main/java/bisq/asset/coins/BSQ.java
Expand Up @@ -18,7 +18,7 @@
package bisq.asset.coins;

import bisq.asset.AddressValidationResult;
import bisq.asset.Base58BitcoinAddressValidator;
import bisq.asset.Base58AddressValidator;
import bisq.asset.Coin;

import org.bitcoinj.core.NetworkParameters;
Expand Down Expand Up @@ -57,7 +57,7 @@ public Regtest() {
}


public static class BSQAddressValidator extends Base58BitcoinAddressValidator {
public static class BSQAddressValidator extends Base58AddressValidator {

public BSQAddressValidator(NetworkParameters networkParameters) {
super(networkParameters);
Expand Down
4 changes: 2 additions & 2 deletions assets/src/main/java/bisq/asset/coins/Bitcoin.java
Expand Up @@ -17,7 +17,7 @@

package bisq.asset.coins;

import bisq.asset.Base58BitcoinAddressValidator;
import bisq.asset.BitcoinAddressValidator;
import bisq.asset.Coin;

import org.bitcoinj.core.NetworkParameters;
Expand All @@ -28,7 +28,7 @@
public abstract class Bitcoin extends Coin {

public Bitcoin(Network network, NetworkParameters networkParameters) {
super("Bitcoin", "BTC", new Base58BitcoinAddressValidator(networkParameters), network);
super("Bitcoin", "BTC", new BitcoinAddressValidator(networkParameters), network);
}


Expand Down