> For the complete documentation index, see [llms.txt](https://illust.gitbook.io/illust-studio/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://illust.gitbook.io/illust-studio/resources/smart-contract-audits/geospatial-registry-litepaper/gsr-smart-contract-abi.md).

# GSR Smart Contract ABI

```javascript
/** Place a piece according to a publisher. */
function place(
    EncodedAssetId calldata encodedAssetId,
    Geohash calldata geohash,
    TimeRange calldata timeRange
)

/** Place a piece according to a publisher, and set the scene URI, in one transaction. */
function placeWithScene(
    EncodedAssetId calldata encodedAssetId,
    Geohash calldata geohash,
    TimeRange calldata timeRange,
    string calldata sceneUri
)

/** Place an asset inside another asset, making it available for use in scenes. */
function placeInside(
    EncodedAssetId calldata encodedAssetId,
    bytes32 parentAssetId,
    TimeRange calldata timeRange
)

/** Remove an asset from the GSR */
function remove(EncodedAssetId calldata encodedAssetId)
    /// Just update a sceneUri without changing the placement.
    function updateSceneUri(
    EncodedAssetId calldata encodedAssetId,
    string memory sceneUri
)

/** Get the current location of an asset. */
function placeOf(bytes32 assetId, address publisher)
    external
    view
    returns (uint64 geohash, uint8 bitPrecision)
    
/** Get the Scene URI metadata of a published asset. */
function sceneURI(bytes32 assetId, address publisher)
    external
    view
    returns (string memory)
    
/// Check if an asset is within a bounding box using a geohash prefix.
function isWithin(
    Geohash calldata boundingGeohash,
    bytes32 assetId,
    address publisher
) external view returns (bool)

/// Check if an asset is currently placed within another asset.against
function isInsideAsset(
    bytes32 assetId,
    bytes32 parentAssetId,
    address publisher
) external view returns (bool)

/// The GsrPlacement event for off-chain querying
event GsrPlacement(
    // Indexed fields
    bytes32 indexed assetId,
    bytes32 indexed parentAssetId,
    bytes32 indexed collectionIdHash,
    // AssetId Details
    EncodedAssetId fullAssetId,
    // Placement data
    address publisher,
    bool published,
    Geohash geohash,
    string sceneUri,
    uint256 placedAt,
    TimeRange timeRange
);
```

The full specification for the external functions to place and query assets in the GSR:]

```javascript
/** Place a piece according to a publisher. */
function place(
EncodedAssetId calldata encodedAssetId,
Geohash calldata geohash,
TimeRange calldata timeRange
)
/** Place a piece according to a publisher, and set the scene URI, in one transaction. */
function placeWithScene(
EncodedAssetId calldata encodedAssetId,
Geohash calldata geohash,
TimeRange calldata timeRange,
string calldata sceneUri
)
/** Place an asset inside another asset, making it available for use in scenes. */
function placeInside(
EncodedAssetId calldata encodedAssetId,
bytes32 parentAssetId,
TimeRange calldata timeRange
)
/** Remove an asset from the GSR */
function remove(EncodedAssetId calldata encodedAssetId)
/// Just update a sceneUri without changing the placement.
function updateSceneUri(
EncodedAssetId calldata encodedAssetId,
string memory sceneUri
)
/** Get the current location of an asset. */
function placeOf(bytes32 assetId, address publisher)
external
view
returns (uint64 geohash, uint8 bitPrecision)
/** Get the Scene URI metadata of a published asset. */
function sceneURI(bytes32 assetId, address publisher)
external
view
returns (string memory)
/// Check if an asset is within a bounding box using a geohash prefix.
function isWithin(
Geohash calldata boundingGeohash,
bytes32 assetId,
address publisher
) external view returns (bool)
/// Check if an asset is currently placed within another asset.against
function isInsideAsset(
bytes32 assetId,
bytes32 parentAssetId,
address publisher
) external view returns (bool)
The GsrPlacement event for off-chain querying
event GsrPlacement(
// Indexed fields
bytes32 indexed assetId,
bytes32 indexed parentAssetId,
bytes32 indexed collectionIdHash,
// AssetId Details
EncodedAssetId fullAssetId,
// Placement data
address publisher,
bool published,
Geohash geohash,
string sceneUri,
uint256 placedAt,
TimeRange timeRange
);
```

[<br>](https://docs.illust.ar/illust-ar/papers-research-and-thought-leadership/geospatial-registry-litepaper/time)
