Escrow Container Management
In order to use a user’s assets for your application, you must first require the user to transfer their ownership temporarily to Upland. Upland, in turn, locks these assets in a vault-like account. In Upland terminology, this vault-like account, controlled by Upland, is called an escrow account.
The developer is responsible for specifying necessary assets the users have to transfer to the escrow account to use your application (for example, a drag car-racing application will need a user to place at least one block explore and one car in the escrow to participate).
Within the escrow account, each application is assigned an escrow container, which contains transferred assets necessary to use the application.
At junctions determined by your application logic, your application can request a resolution of its escrow container (for example, at the end of a drag car-racing application, the loser loses his block explore to the winner).
You can also query the content of your application’s escrow container, request to extend its validity, etc.
Branded assets such as FIFA, Stock Car, and others need permission to be used.
Escrow Containers Transactions Status
Expired - Transactions not accepted/rejected in time;
Rejected - Transaction which players rejected;
User_signature_requested - When the app sends the request to players';
Changing_ownership - When the transaction is being registered in the blockchain (It can take up to three minutes); - Player to Escrow or Escrow to player
In_escrow - Assets inside the container ready for resolution;
Refunded - Transactions in which assets were given back to players;
Removed - Transactions that were deleted from the container before players' acceptance or rejection;
API Definition
The third-party application will be able to create a new container in the escrow to receive user assets.
The container times out after the lesser of the developer’s desired container time to live.
The webhook URL will be used by the escrow service to communicate with third-party apps about the transaction status in the container.
POST /containers HTTP/1.1
Host:
Authorization: Basic username:password
Accept: */*
{
"id": 25,
"appId": 56,
"expirationDate": "2022-09-30T09:15:46.993Z",
"status": "created"
}
Retrieve container information by id, including expiration time. The possible values for the container status are created, locked, processing, resolved, and expired.
GET /containers/{containerId} HTTP/1.1
Host:
Authorization: Basic username:password
Accept: */*
{
"id": 25,
"appId": 56,
"expirationDate": "2022-09-30T09:15:46.996Z",
"status": "created",
"upx": 10000,
"spark": 5,
"assets": [
{
"id": 25,
"transactionId": "e5e0df15-16d8-4dd4-9ecf-669dee4a80e3",
"amount": 25,
"assetId": 2,
"category": "essential",
"ownerEosId": "df8447hf",
"status": "in_escrow"
}
]
}
Refresh the container expiration for the same amount of time previously informed.
POST /containers/{containerId}/refresh-expiration-time HTTP/1.1
Host:
Authorization: Basic username:password
Accept: */*
No content
This action will lock the container. After this action users can not join this container. This doesn't apply to all 3p apps. It's an optional call if a third party wants to make sure that no one else will enter the container.
POST /containers/{containerId}/lock HTTP/1.1
Host:
Authorization: Basic username:password
Accept: */*
No content
To use the resolve endpoint, all assets inside the container must have the status "in_scrow".
Send some operations in batch to be executed over the escrow assets and UPXs.
This call is the final resolution. At this moment Escrow Service will execute transactions and close the container. If there are assets remaining, they will return to the account source.
POST /containers/{containerId}/resolve HTTP/1.1
Host:
Authorization: Basic username:password
Content-Type: application/json
Accept: */*
Content-Length: 99
{
"actions": [
{
"assetId": 2,
"amount": 25,
"category": "spark",
"targetEosId": "df834yr3",
"isRefund": true
}
]
}
{
"transactionId": "e5e0df15-16d8-4dd4-9ecf-669dee4a80e3"
}
It sends back the assets inside the container to the original owners (no fees) and resolves the container.
POST /containers/{containerId}/refund HTTP/1.1
Host:
Authorization: Basic username:password
Accept: */*
{
"transactionId": "e5e0df15-16d8-4dd4-9ecf-669dee4a80e3"
}
Removes a transaction that has not been signed by the user from container.
DELETE /containers/{containerId}/transactions/{transactionId} HTTP/1.1
Host:
Authorization: Basic username:password
Accept: */*
No content
Send a list of user assets that will be added to the escrow container. This action must be approved by Upland User inside the Upland Application to be performed.
Container Id
123
Amount of UPX to include in escrow
10000
Amount of SPARK to include in escrow (IMPORTANT: SPARK transactions are temporarily blocked)
1.5
POST /user/join HTTP/1.1
Host:
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 102
{
"containerId": 123,
"upxAmount": 10000,
"sparkAmount": 1.5,
"assets": [
{
"id": 124,
"category": "blkexplorer"
}
]
}
{
"transactionId": "ac60eb8a-9c32-4f78-b407-1c0396a645e2"
}
Last updated