| name | bobine-contract-caller |
| license | MIT |
| description | Use when you need to call deployed Bobine modules with typed params or perform a signed Ed25519 call through an auth module.
|
| metadata | {"version":"0.1.0","openclaw":{"requires":{"bins":["node"]},"emoji":"🧵","homepage":"https://github.com/hazae41/bobine","os":["linux","darwin","win32"]}} |
Bobine Contract Caller
Default entrypoint: scripts/call_bobine.mjs.
Upstream references
Scope
- Calling a Bobine module through
/api/execute
- Preparing typed Bobine params for contract methods
- Generating Ed25519 keys for Bobine auth sessions
- Performing an authenticated
ed25519 call with nonce handling and signature
Runtime requirements
- Node.js 20+
- Network access to a Bobine server
Load on demand
- Read
references/params.md only when params use packed arrays or quoted text: payloads
- Read
references/runtime.md only when spark handling, outputs, or failure modes are unclear
- Use
scripts/keygen.mjs only when the call needs ed25519 auth
- Use
scripts/call_bobine.mjs for all unsigned and signed calls
Quick workflow
-
Use scripts/call_bobine.mjs as the default entrypoint for Bobine interactions.
-
Read references/params.md only if params are nested, packed, or need quoted text:.
-
Generate keys if the call needs ed25519 auth:
node ./scripts/keygen.mjs
-
Call the target contract with explicit arguments:
node ./scripts/call_bobine.mjs \
--server http://localhost:8080 \
--module <target-module> \
--method <target-method> \
--param text:Alice
Inputs
call_bobine.mjs
--server: Bobine server base URL
--module: target module address
--method: target method name
--param: repeat once per typed param
--auth-module: optional deployed ed25519 auth module address
--sigkey: required when --auth-module is provided
--pubkey: required when --auth-module is provided
--spark-hex: optional one-off spark value for this exact call
--spark-effort: optional inline spark generation target
Param rules
- Scalars:
null
blob:<hex>
bigint:<value>
number:<value>
text:<value>
- Arrays:
- Nesting is allowed
- Quote the whole shell argument when it contains brackets, commas, or spaces
- Quote the
text: payload itself when it contains , or ], for example text:"a,b]"
Gotchas
--param is one top-level Bobine param per flag; nested arrays stay inside a single typed param string
text: values containing , or ] must quote the payload itself, for example text:"a,b]"
- Signed calls require all of
--auth-module, --sigkey, and --pubkey
--spark-hex is a one-off override for a specific call; prefer --spark-effort when you want a fresh spark
keygen.mjs prints secret material, so do not paste its output back to the user unless they explicitly ask for it
Signed call behavior
- Read
--server, target module, target method, and typed params
- Build the Bobine session payload
[auth_module, pubkey]
- Derive the session address from
sha256(pack(session))
- Query
<auth_module>.get_nonce(session_address)
- Sign
[domain, module, method, params, nonce]
- Call
<auth_module>.call(module, method, params, pubkey, signature)
- Print a JSON object with logs, returned value, spark hex, and reported sparks
Output contract
- Scripts print a single JSON object on stdout on success
- Usage and failure diagnostics go to stderr
- Returned Bobine values are normalized into tagged JSON:
{ "type": "text", "value": "hello" }
{ "type": "bigint", "value": "42" }
{ "type": "array", "value": [...] }
keygen.mjs prints { "sigkey": "...", "pubkey": "..." }
Safety
- Do not echo private keys back to the user unless they explicitly ask for them
- Treat
sigkey as sensitive
- Prefer a fresh inline spark by default; use
--spark-hex only when you deliberately want to supply a one-off spark
- Surface server errors and decoded logs instead of retrying blindly
Troubleshooting
Missing required call arguments: re-run with --server, --module, --method, and any required auth flags
Unknown value type: read references/params.md
Failed Bobine execute request: report the HTTP status and response body
Invalid session or Unauthorized: the auth module, nonce, keys, or target contract assumptions are wrong