Types
Pebble supports a few built-in types.
Each of these builtin types maps directly a corresponding UPLC type under the hood.
Primitives
Pebble provides four primitive types that map directly to Plutus Core:
intboolbytesstring
These types form the foundation for all Pebble contracts.
int
Arbitrary-precision signed integer.
Backed by Plutus Integer.
Example
const supply: int = 1_000_000;
let spent: int = 500;
assert (supply - spent) >= 0;
Operators
- Arithmetic:
+,-,*,/,% - Comparison:
<,<=,>,>=,==,!=
bytes
Raw byte arrays. Commonly used for hashes, policy IDs, token names, and low-level identifiers.
Example
const policy: bytes = #deadbeef;
const token: bytes = "MyToken".toBytes();
assert tx.outputs[0].value.amountOf(policy, token) > 0;
Pebble represents token names as bytes const token: bytes = "MyToken".toBytes(). This ensures compatibility with Plutus, where token names are byte arrays.
Common Operators
- Equality:
==,!= - Concatenation:
a + b - Conversion:
"hello".toBytes() - Hashing:
hash(bytesVal)
string
UTF-8 encoded text. Primarily for logging and off-chain metadata. Avoid storing large strings on-chain due to cost.
Example
const msg: string = "Order filled";
trace(msg);
bool
Logical true/false values. Derived from comparisons or logical expressions.
Example
const signed: bool = tx.signatories.includes(ownerHash);
if (signed && tx.outputs.length() > 0) {
trace("Valid transaction");
} else {
fail "Unauthorized";
}
Operators
- Logical:
&&,||,! - Comparisons return
bool
Cardano-Specific
See Types for all cardano-specific types supported in Pebble.
Refer stdScope.ts for details regarding their definition.
Optional / Sum Types
Option<T>
Use Option<T> to represent values that may or may not exist.
Example
const maybeDatum: Option<int> = Some{ value: 10 };
case/match used for destructuring
match maybeDatum {
Some{ value }: trace(value),
None{} : fail "missing datum"
}
Destructuring -
const InlineDatum{ datum: { owner, token, minAmount } as Order } = spendingInput.datum;
Structs
Defined using struct declarations.
struct defines custom composite type with named fields.
struct Order {
ownerPaymentCreds: Credential,
policy: bytes,
tokenName: bytes,
minReceiveAmount: int
}