Deploy a Contract
After you compile a smart contract you can deploy it to an Oracle Blockchain Platform Besu environment.
The deployment process creates the required helper libraries and UUPS proxies, links the token and account contexts, and sets the governance context. The token and account are deployed in an inactive state. They become active only through the deployment intent process.
To deploy a compiled contract, obtain the address of the predeployed governance contract and its policy UUID from the digital assets token administrator. Obtain an account with permission to deploy and, where applicable, to submit the deployment intent. The deployment form requires a contract, environment, deployment ID, and registry metadata: smart contract ID, version, description, and author. The deployment ID identifies a deployment state that can be resumed; use a stable, unique value when retrying the same deployment.
Deployment Life Cycle
- Compile the project.
- Deploy the Oracle Blockchain Platform digital assets stack.
- Set account/token and governance contexts. (Proxies are inactive.)
- Review and submit the deployment intent for both proxy components.
- No-Op governance: The proposal succeeds and then the components are activated.
- Governed: The required policy approvals complete and then the components are activated.
Note:
Proxies are inactive immediately after deployment. Successful contract deployment does not mean that the token is active. Activation is controlled by the governance contract configured for the deployment, not by a UUPS upgrade.Create an Oracle Blockchain Platform Besu Environment
An Oracle Blockchain Platform Besu environment stores the Oracle Blockchain Platform RPC host, not a full JSON-RPC endpoint. The extension derives the required Besu and governance routes from this host.
- Open the Environments view, and then select Add Environment.
- Enter a descriptive environment name. For example, enter obp-test.
- Select Oracle Blockchain Platform Besu for Environment Type.
- Enter the RPC URL Host. For example, enter https://rpcproxy.example.com:443.
The RPC URL host must be an
httporhttpsorigin only, not an endpoint path, query string, fragment, username, or password. For example, enterhttps://rpcproxy.example.com:443, nothttps://rpcproxy.example.com:443/v1/besu/proxy. - Enter the network Chain ID.
- Enter the authorization token that is required by the RPC proxy.
- Optionally, set Gas Price Wei, Allow Self Signed, and a CA Certificate Path for a private certificate authority. Leave BESU Accounts empty unless your deployment model specifically requires non-custodial signing. The Oracle Blockchain Platform wallet service deployments collect signing details by deployment.
- Select Create.
For the stored Oracle Blockchain Platform host, the extension derives the Besu proxy endpoint and uses the Oracle Blockchain Platform governance intent endpoint. This keeps the environment portable between deployment, execution, and governance operations.
The built-in Hardhat Local Node environment is available for local development and does not need to be saved. It is not an Oracle Blockchain Platform environment.
Deploy to an Oracle Blockchain Platform Besu Environment
- In the Contracts pane, open the project's Deploy / Execute form and select the Deploy tab.
- Select the contract package and the Besu environment.
- Enter a deployment ID, or keep the displayed deployment ID.
- Complete the required registry metadata. The deployment-time token name, symbol, description, URI, and administrator IDs are optional. Empty values use the deployment script defaults.
- Enter the wallet service signing information shown for the Oracle Blockchain Platform environment.
- Wallet Service Sign URL
- Wallet Service Accounts, a JSON array of address/wallet-ID objects
- Wallet Service Auth Token
- Select Next.
- In Deployment Options, enter the Governance Contract Address and Policy UUID, then select Deploy.
Blockchain App Builder runs the generated Hardhat deployment script through the Oracle Blockchain Platform Besu network, using the wallet service values only for that deployment. It deploys or reuses the required components, sets their contexts, and returns the token and account proxy addresses. Both proxies are inactive.
Submit the Deployment Intent
After the inactive deployment completes, the governance section is populated with the deployed Token Target and Account Target values. Keep both targets in the intent. Each is an EIP-1967 proxy; governance activates the proxy against its resolved implementation address and runtime code hash.
- Confirm the token and account targets. Override them only if you are intentionally proposing an existing proxy pair.
- Enter a future Proposal Deadline.
- For Oracle Blockchain Platform Besu, enter the From Address authorized by the selected policy. The selected environment must have an RPC URL host and authorization token.
- For other EVM environments, select a Caller Account or enter the caller's private key. The application derives the sender address from that key.
- Select Review. The extension resolves each proxy's implementation and implementation code hash, and then displays the proposed intent.
- Verify the UUID, deadline, proxy targets, implementation addresses, and code hashes.
- Select Submit.
For an Oracle Blockchain Platform environment, the extension submits the reviewed intent through the Oracle Blockchain Platform wallet service governance endpoint. For other EVM environments, it sends a signed proposeDeployIntent transaction directly to the governance contract via JSON-RPC.
If you change the governance address, UUID, proxy targets, or deadline after review, the preview is invalidated. Review the proposal again before submitting it.
Governance Activation
The same intent workflow is used for both governance types. The difference is what happens after the governance contract accepts the proposal:
- No-Op: A successful
proposeDeployIntentcall activates the included components immediately. Confirm the transaction or Oracle Blockchain Platform response, and then verify the token’s active state. - Governed: The submitted intent remains subject to the configured policy. The token and account become active only after the required approvals have been received before the deadline.
The extension submits the intent; it does not impersonate or bypass governance approvers. For a governed policy, use the organization’s approval process and wait for the governance contract to activate. If the policy rejects or expires the intent, correct the cause and then submit a new valid intent. Deployment alone will not activate the proxies.
Note:
After you deploy a contract, manifest files are generated in the.openzeppelin folder under the project root. For production networks (not development networks), commit these files to source control. For more information, see Network Files in the OpenZeppelin documentation.
Troubleshooting Deployment Errors
| Condition | Resolution |
|---|---|
| Oracle Blockchain Platform environment cannot be saved | Enter an HTTP or HTTPS origin without an endpoint path. The Oracle Blockchain Platform field expects the host only. |
| Governance review says that the Oracle Blockchain Platform environment needs an RPC URL host and authorization token | Update the saved Oracle Blockchain Platform environment with both values, and then open or select it again. |
| Governance review reports missing runtime bytecode | Verify the selected network and proxy/implementation addresses. Do not submit an intent against a target that is not deployed. |
| Deployment succeeds but the token is inactive | Submit the deployment intent. For governed governance, wait for all policy approvals; for no-op governance, confirm that the proposal transaction succeeded. |
| Proposal cannot be submitted after changing fields | Select Review again. The application deliberately invalidates a stale preview. |