AI prompts
base on Genesis Smart Contracts for Sidra Chain # Genesis Smart Contracts for Sidra Chain
These are the genesis smart contracts designed specifically for the Sidra Chain.
### Libraries
#### 1. **Pausable.sol**
This library provides mechanisms to pause and unpause certain functionalities of a contract. It's essential for emergency situations or maintenance periods.
- **Features**:
- **Pause and Unpause**: Provides functions to pause and unpause the contract.
- **Modifiers**: Includes modifiers to easily check the pause status or ownership before executing functions.
- **Events**: Emits events when the contract is paused or unpaused.
### Core Contracts
### 1. **Owner.sol**
This contract establishes a foundational ownership model for the Sidra Chain.
- **Features**:
- **Ownership**: Only the owner of the contract can execute specific privileged functions.
- **Transfer Ownership**: The current owner has the capability to transfer ownership to another Ethereum address.
- **Check Ownership**: Any user can verify if a particular address is the current owner.
### 2. **WalletAccessControl.sol**
This contract manages the access control for wallets on the Sidra Chain, offering the ability to enable or disable specific Ethereum addresses. It builds upon the ownership model instantiated by the `Owner` contract.
- **Features**:
- **Access Control**: Individual wallets can be either enabled or disabled.
- **Batch Operations**: Provides the ability to enable or disable a batch of wallets in a single transaction.
- **Wallet Verification**: Check if a specific wallet is enabled or disabled.
### 3. **SidraToken.sol**
This contract introduces the Sidra Token (ST) on the Sidra Chain. While it shares similarities with the ERC-20 token standard, it is not an ERC-20 token. The Sidra Token incorporates unique features such as a mining mechanism, conversion to coins, and miner management. Additionally, it offers functionalities to pause and unpause its operations.
- **Features**:
- **Token Properties**: Defining attributes such as token symbol, name, decimals, total supply, and circulating supply.
- **Mining**: Designated miners can mine the token and in return receive rewards.
- **Conversion**: Sidra Tokens can be converted into coins (conversion is managed at the consensus layer).
- **Miner Management**: The owner can add or remove miners.
- **Minting**: Mint new tokens by the owner.
- **Pausing Mechanism**: The contract can be paused or unpaused based on requirements.
### 4. **MainFaucet.sol**
This contract operates as a faucet to distribute coins to specific wallets on the Sidra Chain. It builds upon the ownership model instantiated by the `Owner` contract.
- **Features**:
- **Coin Distribution**: Enabled by a function that transfers coins from the contract to a specified recipient.
- **Balance Tracking**: Keeps track of the amount of coins sent to each wallet and the number of coins received by the contract.
- **Balance Retrieval**: Provides a function to check the contract's balance.
- **Event Logging**: Logs events for sent and received transactions with details on the involved wallet, amount, and timestamp.
### 5. **Waqf.sol**
This contract handles the receipt of waqf (charitable donations) and ensures they are properly burned to eliminate them from the circulating supply.
- **Features**:
- **Waqf Receipt**: Utilizes a fallback function to receive coins into the contract.
- **Balance Tracking**: Keeps track of the total waqf received and the amount received from each donor.
- **Coin Burning**: Transfers received coins to the zero address to burn them.
- **Event Logging**: Logs an event for each receipt of waqf with details on the donating wallet, amount, and timestamp.
## Notes
- As these are genesis contracts for the Sidra Chain, they are designed for direct initialization in the genesis block.
", Assign "at most 3 tags" to the expected json: {"id":"4315","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"