base on null # Bellscriptions A minter and protocol for inscriptions on Bells. ## Setup Install dependencies: ```sh npm install ``` Create a `.env` file with your node information: ``` NODE_RPC_URL=http://<ip>:<port> NODE_RPC_USER=<username> NODE_RPC_PASS=<password> TESTNET=false ``` ## Funding Generate a new `.wallet.json` file: ``` node . wallet new ``` Then send BELLS to the address displayed. Once sent, sync your wallet: ``` node . wallet sync ``` If you are minting a lot, you can split up your UTXOs: ``` node . wallet split <count> ``` When you are done minting, send the funds back: ``` node . wallet send <address> <optional amount> ``` ## Minting From file: ``` node . mint <address> <path> ``` Repeating: ``` node . mint <address> <path> <repeat> ``` Examples: ``` node . mint BQQcsCCBiQn1aJsrrNzTg4Lm7MMd1PzZHq dog.jpeg ``` ``` node . mint BQQcsCCBiQn1aJsrrNzTg4Lm7MMd1PzZHq mint.json 100 ``` ## Bellmap You may bulk mint bellmap by specifying an address to receive and a start and end bellmap number ``` node . mint-bellmap <address> <start> <end> ``` Examples: ``` node . mint-bellmap BQQcsCCBiQn1aJsrrNzTg4Lm7MMd1PzZHq 0 100 ``` ## Viewing Start the server: ``` node . server ``` And open your browser to: ``` http://localhost:3000/tx/15f3b73df7e5c072becb1d84191843ba080734805addfccb650929719080f62e ``` ## Protocol The bellscriptions protocol allows any size data to be inscribed onto subwoofers. An inscription is defined as a series of push datas: ``` "ord" OP_1 "text/plain; charset=utf8" OP_0 "Woof!" ``` For bellscriptions, we introduce a couple extensions. First, content may spread across multiple parts: ``` "ord" OP_2 "text/plain; charset=utf8" OP_1 "Woof and " OP_0 "woof woof!" ``` This content here would be concatenated as "Woof and woof woof!". This allows up to ~1500 bytes of data per transaction. Second, P2SH is used to encode inscriptions. There are no restrictions on what P2SH scripts may do as long as the redeem scripts start with inscription push datas. And third, inscriptions are allowed to chain across transactions: Transaction 1: ``` "ord" OP_2 "text/plain; charset=utf8" OP_1 "Woof and " ``` Transaction 2 ``` OP_0 "woof woof!" ``` With the restriction that each inscription part after the first must start with a number separator, and number separators must count down to 0. This allows indexers to know how much data remains. ## FAQ ### I'm getting ECONNREFUSED errors when minting There's a problem with the node connection. Your `dogecoin.conf` file should look something like: ``` rpcuser=ape rpcpassword=zord rpcport=22555 server=1 ``` Make sure `port` is not set to the same number as `rpcport`. Also make sure `rpcauth` is not set. Your `.env file` should look like: ``` NODE_RPC_URL=http://127.0.0.1:22555 NODE_RPC_USER=ape NODE_RPC_PASS=zord TESTNET=false ``` ### I'm getting "insufficient priority" errors when minting The miner fee is too low. You can increase it up by putting FEE_PER_KB=300000000 in your .env file or just wait it out. The default is 100000000 but spikes up when demand is high. ", Assign "at most 3 tags" to the expected json: {"id":"6489","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"