TransactionBuilder { public TransactionBuilder signers(Signer... signers) { if (containsDuplicateSigners(signers)) { throw new TransactionConfigurationException("Can't add multiple signers" + " concerning the same account."); } if (containsMultipleFeeOnlySigners(signers)) { throw new TransactionConfigurationException("Can't add multiple signers with the " + "fee-only witness scope. Only one signer can be used to cover the " + "transaction fees."); } this.signers = new ArrayList<>(Arrays.asList(signers)); return this; } protected  TransactionBuilder(Neow3j neow); TransactionBuilder wallet(Wallet wallet); TransactionBuilder version(byte version); TransactionBuilder nonce(Long nonce); TransactionBuilder validUntilBlock(long blockNr); TransactionBuilder firstSigner(ScriptHash sender); TransactionBuilder signers(Signer... signers); TransactionBuilder additionalNetworkFee(Long fee); TransactionBuilder script(byte[] script); TransactionBuilder attributes(TransactionAttribute... attributes); NeoInvokeScript callInvokeScript(); Transaction sign(); Transaction getUnsignedTransaction(); TransactionBuilder doIfSenderCannotCoverFees(
            BiConsumer<BigInteger, BigInteger> consumer); TransactionBuilder throwIfSenderCannotCoverFees(
            Supplier<? extends Throwable> exceptionSupplier);  }
@Test public void failAddingMultipleSignersConcerningTheSameAccount() { TransactionBuilder b = new TransactionBuilder(neow); exceptionRule.expect(TransactionConfigurationException.class); exceptionRule.expectMessage("concerning the same account"); b.signers(Signer.global(account1.getScriptHash()), Signer.calledByEntry(account1.getScriptHash())); }
@Test public void failAddingMultipleFeeOnlySigners() { TransactionBuilder b = new TransactionBuilder(neow); exceptionRule.expect(TransactionConfigurationException.class); exceptionRule.expectMessage( new StringContains("Can't add multiple signers with the fee-only witness scope")); b.signers(Signer.feeOnly(account1.getScriptHash()), Signer.feeOnly(account2.getScriptHash())); }