import {
ContractTemplateDto,
ContractUploadRequest,
ContractUploadRequestTypeEnum,
Fireblocks,
FireblocksResponse,
} from '@fireblocks/ts-sdk';
async function uploadContractTemplate() {
const privateKey = '...'; // Your Fireblocks API private key
const apiKey = '...'; // Your Fireblocks API key
const fireblocksSdk = new Fireblocks({
apiKey,
secretKey: privateKey,
});
const template: ContractUploadRequest = {
name: 'Simple Counter',
description: 'A basic counter contract for demonstration',
longDescription:
"This contract allows incrementing a counter and retrieving its current value. It's a simple example of state management in Solidity.",
bytecode: artifact.bytecode.object,
sourcecode: '// SPDX-License-Identifier: MIT\npragma solidity ^0.8.13;\n\ncontract Counter {...}', // Optional: full source code
type: ContractUploadRequestTypeEnum.TokenUtility,
abi: artifact.abi,
attributes: {
useCases: ['Demo', 'Education'],
standards: ['None'],
auditor: {
name: 'N/A',
imageURL: '',
link: '',
},
},
docs: {
details: 'A basic counter contract for demonstration purposes.',
kind: 'user',
version: 1,
methods: {
'increment()': {
details: 'Increments the counter by 1',
},
'getCount()': {
details: 'Returns the current counter value',
returns: { '': 'The current count as a uint256' },
},
},
},
};
try {
const response: FireblocksResponse<ContractTemplateDto> = await sdk.contractTemplates.uploadContractTemplate({
contractUploadRequest: template,
});
console.log('Template uploaded successfully. Template ID:', response.data.id);
return response.data.id;
} catch (error) {
console.error('Error uploading template:', error);
}
}
uploadContractTemplate().catch(error => {
console.error(error);
process.exitCode = 1;
});