Issuing New Token via Java SDK Not Working

I’m using the Fireblocks Java SDK (version 10.1.0) and most operations are working fine — I can list vault accounts, create wallets, etc., without any issues.

However, I’m running into a problem when trying to issue a new token:


TokenLinkDto response = fireblocks.tokenization().issueNewToken(createTokenRequestDto, idempotencyKey).join().getData();

The method executes successfully and returns:


{

"id": "ba3b1d03-26bd-4a41-8a37-bf2269eef412",

"displayName": "Unit Test Token",

"status": "PENDING"

}

But I can tell something went wrong based on the console output:

And also from the webhook responses:

{
    "type": "TRANSACTION_STATUS_UPDATED",
    "tenantId": "ef0e5dab-104f-4e03-a63a-5840eb9c1560",
    "timestamp": 1747942275023,
    "data": {
        "id": "2eadc962-fa68-4072-88c5-404ab208cb30",
        "createdAt": 1747942264305,
        "lastUpdated": 1747942265499,
        "assetId": "ETH_TEST5",
        "source": {
            "id": "1",
            "type": "VAULT_ACCOUNT",
            "name": "Conta do Zoran - Console",
            "subType": ""
        },
        "destination": {
            "id": null,
            "type": "ONE_TIME_ADDRESS",
            "name": "N/A",
            "subType": ""
        },
        "amount": 0,
        "networkFee": 0,
        "netAmount": 0,
        "sourceAddress": "",
        "destinationAddress": "",
        "destinationAddressDescription": "",
        "destinationTag": "",
        "status": "FAILED",
        "txHash": "",
        "subStatus": "SMART_CONTRACT_EXECUTION_FAILED",
        "signedBy": [],
        "createdBy": "56b99e3a-75be-41ca-89d4-82afae62312d",
        "rejectedBy": "",
        "amountUSD": 0,
        "addressType": "",
        "note": "Deploy contract from registry",
        "exchangeTxId": "",
        "requestedAmount": 0,
        "feeCurrency": "ETH_TEST5",
        "operation": "CONTRACT_CALL",
        "amountInfo": {
            "amount": "0",
            "requestedAmount": "0",
            "netAmount": "0",
            "amountUSD": "0.00"
        },
        "feeInfo": {
            "networkFee": "0"
        },
        "externalTxId": null,
        "blockInfo": {},
        "errorDescription": "execution reverted: 0xd6bda275",
        "networkRecords": [],
        "signedMessages": [],
        "extraParameters": {
            "contractId": "00000000-0000-0000-0000-000000000003",
            "contractType": "FUNGIBLE_TOKEN",
            "contractCallData": "0x60806040526040516104...  ...8282610037565b50505050610356",
            "contractTemplateName": "Upgradeable ERC-20F"
        },
        "assetType": "BASE_ASSET"
    }
}

I suspect I might be passing incorrect parameters or skipping a required step before calling issueNewToken.

One thing that stood out: I couldn’t find a way to specify the TEST_NET network in the Java SDK. This parameter is required when issuing a token via the Fireblocks console, but I haven’t seen any reference to it in the SDK docs.

I started from this reference:
:backhand_index_pointing_right: Issue New ERC20F Tokens

Here’s the JSON representation of the parameters I’m sending (converted from the Java object):

{
  "blockchainId" : "B75VRLGX",
  "assetId" : "ETH_TEST5",
  "vaultAccountId" : "1",
  "createParams" : {
    "contractId" : "00000000-0000-0000-0000-000000000003",
    "deployFunctionParams" : [ {
      "name" : "implementation",
      "description" : null,
      "internalType" : "address",
      "type" : "address",
      "components" : null,
      "value" : "0x48FD165c640a506d0847266Ce6cA8fF013699311",
      "functionValue" : null
    }, {
      "name" : "_data",
      "description" : null,
      "internalType" : null,
      "type" : "bytes",
      "components" : null,
      "value" : null,
      "functionValue" : {
        "name" : "initialize",
        "inputs" : [ {
          "name" : "_name",
          "description" : null,
          "internalType" : "string",
          "type" : "string",
          "components" : null,
          "value" : "Unit Test Token",
          "functionValue" : null
        }, {
          "name" : "_symbol",
          "description" : null,
          "internalType" : "string",
          "type" : "string",
          "components" : null,
          "value" : "UTT_TEST",
          "functionValue" : null
        }, {
          "name" : "defaultAdmin",
          "description" : null,
          "internalType" : "address",
          "type" : "address",
          "components" : null,
          "value" : "0x66A489c3F3965Dc5C99547d6445352787356c7ac",
          "functionValue" : null
        }, {
          "name" : "minter",
          "description" : null,
          "internalType" : "address",
          "type" : "address",
          "components" : null,
          "value" : "0x66A489c3F3965Dc5C99547d6445352787356c7ac",
          "functionValue" : null
        }, {
          "name" : "pauser",
          "description" : null,
          "internalType" : "address",
          "type" : "address",
          "components" : null,
          "value" : "0x66A489c3F3965Dc5C99547d6445352787356c7ac",
          "functionValue" : null
        } ],
        "outputs" : null,
        "stateMutability" : null
      }
    } ]
  },
  "displayName" : "Unit Test Token",
  "useGasless" : false,
  "fee" : "0.00001",
  "feeLevel" : "MEDIUM"
}   

Any ideas on what might be missing or misconfigured?

Thanks in advance!

Hi Zoran,

It seems that in the implementation address you put the address of the proxy instead of the logic address:
Please put in the implementation address -
The address you receive from calling getDeployedContracts method with your Id
(Which is 0x0f25045d15C163478bb67C56c5d9D602628F4F62)
e.g -
Your payload should look like this -

const payload = {
    "assetId": "ETH_TEST5",
    "blockchainId":"11155111",
    "vaultAccountId":"1",
    "createParams":
    {
        "contractId" : "00000000-0000-0000-0000-000000000003",
        "deployFunctionParams" : [ {
          "name" : "implementation",
          "description" : null,
          "internalType" : "address",
          "type" : "address",
          "components" : null,
          "value" : "0x0f25045d15C163478bb67C56c5d9D602628F4F62",
          "functionValue" : null
        }, {
          "name" : "_data",
           .
           .
           .
           .
1 Like

Got it, thank you very much.