The blob
Contract
The blob
contract is one of the core contracts on each IOTA Smart Contracts chain.
The objective of the blob
contract is to maintain an on-chain registry of blobs.
A blob is a collection of named chunks of binary data.
<fieldName1>: <binaryChunk1>
<fieldName2>: <binaryChunk2>
...
<fieldNameN>: <binaryChunkN>
Both names and chunks are arbitrarily long byte slices.
Blobs can be used to store arbitrary data like.
Each blob in the registry is referenced by its hash. The hash is deterministically calculated from the concatenation of all pieces:
blobHash = hash( fieldName1 || binaryChunk1 || fieldName2 || binaryChunk2 || ... || fieldNameN || binaryChunkN)
Usually, field names are short strings, but their interpretation is use-case specific.
Two predefined field names are interpreted by the VM while deploying smart contracts from binary:
- fieldname =
"v"
is interpreted as the VM type. - fieldname =
"p"
is interpreted as the smart contract program binary.
The blob describing a smart contract may contain extra fields (ignored by the VM), for example:
"v" : VM type
"p" : smart contract program binary
"d" : data schema for data exchange between smart contract and outside sources and consumers
"s" : program sources in .zip format
Entry Points
storeBlob()
Stores a new blob in the registry.
Parameters
The key/value pairs of the received parameters are interpreted as the field/chunk pairs of the blob.
Returns
hash
([32]byte
): The hash of the stored blob.
Views
getBlobInfo(hash BlobHash)
Returns the size of each chunk of the blob.
Parameters
hash
([32]byte
): The hash of the blob.
Returns
<fieldName1>: <size of the dataChunk1> (uint32)
...
<fieldNameN>: <size of the dataChunkN> (uint32)
getBlobField(hash BlobHash, field BlobField)
Returns the chunk associated with the given blob field name.
Parameters
hash
([32]byte
): The hash of the blob.field
([]byte
): The field name.
Returns
bytes
([]byte
): The chunk associated with the given field name.
listBlobs()
Returns a list of pairs blob hash
: total size of chunks
(uint32
) for all blobs in the registry.