This is a one-click AWS deployment to run a Bitcoin full-node and Ord instance with a client-controller. The client currently facilitates creating an ord wallet, viewing balance/address info and uploading / inscribing files.
- Have an AWS account set up with the cli : https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
git clone git@github.com:kvnn/OrdControl.git
cd OrdControl
terraform init
terraform apply
- open the visibility / control client by opening
index.html
in the browser (for me its atfile:///Users/kevin/Projects/OrdControl/client/index.html
) - visit your server [OPTIONAL]:
- copy / paste the
ssh_connection_string
(printed once #5 is complete) to connect to your instance - in instance, run
tail -f /var/log/cloud-init-output.log
to see status of the post-deploy script - wait until you see "ord-server init.tpl finished" in the above before taking any actions (the client will update you as well)
- you can manually run ord commands via
/home/ubuntu/ord/target/release/ord --bitcoin-data-dir=/mnt/bitcoin-ord-data/bitcoin --data-dir=/mnt/bitcoin-ord-data/ord {CMD e.g. "info"}
- copy / paste the
- if you restart the instance, you need to make modifications to the public dns in
env.js
. - its taking me 5-10 minutes from
terraform apply
until Ord is successfully indexing. A docker container might help. - it sets up a volume at
/mnt/bitcoin-ord-data
with bitcoin and ord data dirs synced up to April 1 2023 - as of March 6 2023, this setup is costing me about $13 / day, which is almost entirely EC2 costs. I'll sometimes run
terraform --auto-approve destroy
when I know I won't be using it - you can change regions, availability zones and instance types in
variables.tf
. Note that the data drive mount may fail for instances that usenvme
type drives, and it may fail for other regions. If you have a use-case you need help with, feel free to create an Issue. - the AMI used is a standard AWS AMI
- see
init.tpl
for the scripting done to your server (e.g. to make sure there are no backdoors here)
-
Rename to
OrdControl
and have Dall-e generate something dope -
Add UI screenshot or loop to README
-
server
- wallet control
- create wallet
- delete wallet (note: see https://github.com/casey/ord/issues/1649)
- instead of saving seed phrase to Dynamo table, save to a flate file on server and allow retrieval
- allow seed-phrase delete
- generate receive addresses
- send funds
- view txs
- implement Inscription functionality
- basic functionality
- resilient queueing
- smart queue consumer
- light database for managing queued Inscriptions
- alert UI if ec2/boto credentials error occurs, allow server restart
- allow server restart regardless of the above
- show journalctl alerts / errors in UI
- verify that
bitcoin-cli
work, play with it - include controller websocket server
- add authentication token via terraform
- actually use the auth token
- add "Name: OrdControl" tag to all aws resources
- add Dynamo table
- get fine-grained ord-index status (via strace?)
- split controller.py into a module, split out the ord-indexing watcher / logger
- wallet control
-
client
- release MVP
- clean up js / css
- show ssh connection string
- add feedback / hold mechanism for e.g. create-wallet, create-address
- wallet UI
- create wallet
- disable wallet (note: see https://github.com/casey/ord/issues/1649)
- show seed phrase
- clean up initial state (when wallet doesn't exist)
- add address
- view addresses
- implement Inscription functionality
- basic functionality
- custom parameters (e..g fee_rate)
- queue visbility
- Inscription status
- internal info
- on-chain info
- Inscription status
- queue controls
- cancel
- prioritize / replace tx
- include
bitcoin-cli
controls?
convert repage-orig.gif -coalesce -fuzz 2% +dither -layers Optimize +map repage.gif
lets make this better
inscribe output={
"commit": "7ed2f88a8c27e67e2721c454a045505b47c2741532fbd5306e865cc10f4a0f53",
"inscription": "452a3e9b08a7c0d1919fe4b7a9a8d08ebc8dc58ebd1fd56de745a2cbbddfafc5i0",
"reveal": "452a3e9b08a7c0d1919fe4b7a9a8d08ebc8dc58ebd1fd56de745a2cbbddfafc5",
"fees": 7965
}
, error=
_put_dynamo_item inscribed ∂ßååå.txt: {
"commit": "7ed2f88a8c27e67e2721c454a045505b47c2741532fbd5306e865cc10f4a0f53",
"inscription": "452a3e9b08a7c0d1919fe4b7a9a8d08ebc8dc58ebd1fd56de745a2cbbddfafc5i0",
"reveal": "452a3e9b08a7c0d1919fe4b7a9a8d08ebc8dc58ebd1fd56de745a2cbbddfafc5",
"fees": 7965
}