1

I'm getting an op_cannot_claim error code, when trying to claim claimable balance.

I've checked the docs, they don't mention this error code at all.

let account = await server.loadAccount(pairA.publicKey());

// Create a claimable balance with our two above-described conditions.
let soon = Math.ceil(Date.now() / 1000 + 60); // .now() is in ms
let bCanClaim = Stellar.Claimant.predicateBeforeRelativeTime("60");
let aCanReclaim = Stellar.Claimant.predicateNot(
  Stellar.Claimant.predicateBeforeAbsoluteTime(soon.toString())
);

// Create the operation and submit it in a transaction.
let claimableBalanceEntry = Stellar.Operation.createClaimableBalance({
  claimants: [
    new Stellar.Claimant(pairB.publicKey(), bCanClaim),
    new Stellar.Claimant(pairA.publicKey(), aCanReclaim),
  ],
  asset: Stellar.Asset.native(),
  amount: "420",
});

let tx = new Stellar.TransactionBuilder(account, { fee: Stellar.BASE_FEE })
  .addOperation(claimableBalanceEntry)
  .setNetworkPassphrase(Stellar.Networks.TESTNET)
  .setTimeout(180)
  .build();

// signing transaction
var keypair = Stellar.Keypair.fromSecret(pairA.secret());
tx.sign(keypair);

server
  .submitTransaction(tx)
  .then(function () {
    console.log("Claimable balance created!");
  })
  .catch(function (err) {
    console.error(`Tx submission failed: ${err}`);
  });

let balances = await server
  .claimableBalances()
  .claimant(pairB.publicKey())
  .limit(1) // there may be many in general
  .order("desc") // so always get the latest one
  .call()
  .catch(function (err) {
   console.error(`Claimable balance retrieval failed: ${err}`);
});

let balanceId = balances.records[0].id;

let claimBalance = Stellar.Operation.claimClaimableBalance({
  balanceId: balanceId,
});

console.log(pairB.publicKey(), "claiming", balanceId);

let tx1 = new Stellar.TransactionBuilder(account, { fee: Stellar.BASE_FEE })
  .addOperation(claimBalance)
  .setNetworkPassphrase(Stellar.Networks.TESTNET)
  .setTimeout(180)
  .build();

let key = Stellar.Keypair.fromSecret(pairA.secret());
tx1.sign(key);

server.submitTransaction(tx1).catch(function (err) {
  console.error(err);
});

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.