diff --git a/README.md b/README.md
new file mode 100644
index 0000000..037f73f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,288 @@
+# libsam
+
+## Install
+
+```sh
+go get github.com/samlior/libsam
+```
+
+## Shreder
+
+### Endpoint
+
+| region | shreder url |
+| :----- | :-------------------- |
+| fra | fra1.shreder.xyz:9991 |
+| ams | ams1.shreder.xyz:9991 |
+| ewr | ny1.shreder.xyz:9991 |
+
+### Usage
+
+See [example](./cmd/shreder/main.go).
+
+## SWQoS
+
+### Recommended configuration
+
+ Frankfurt
+
+```json
+{
+ "name": "helius",
+ "sendTxUrl": "http://fra-sender.helius-rpc.com/fast",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://fra-sender.helius-rpc.com/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "0slot",
+ "sendTxUrl": "http://de2.0slot.trade?api-key=3fec78a0d361418a8eff95be9ed85cc3&anti-mev=true",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://de2.0slot.trade/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "blockrazor",
+ "sendTxUrl": "frankfurt.solana-grpc.blockrazor.xyz:80",
+ "sendBundleUrl": "",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "node1",
+ "sendTxUrl": "http://fra.node1.me",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://fra.node1.me/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "nextblock",
+ "sendTxUrl": "http://frankfurt.nextblock.io/api/v2/submit",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://frankfurt.nextblock.io/api/v2/ping",
+ "tips": "0.001",
+ "rateLimit": 4
+},
+{
+ "name": "flashBlock",
+ "sendTxUrl": "http://fra.flashblock.trade/api/v2/submit-batch",
+ "sendBundleUrl": "http://fra.flashblock.trade/api/v2/submit-batch",
+ "keepAliveUrl": "http://fra.flashblock.trade/api/v2/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "astralane",
+ "sendTxUrl": "http://fr.gateway.astralane.io/iris?api-key=zhaozNc5OIadLPI3r9nUVVPpCZcQAUjngO6Tgr5XUJcmBrIisFaaZF81Ijn01Ytn",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://fr.gateway.astralane.io/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "nozomi",
+ "sendTxUrl": "http://fra2.nozomi.temporal.xyz/?c=34cff37e-f1a5-446a-98bb-66aa1b62cb74",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://fra2.nozomi.temporal.xyz/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "stellium",
+ "sendTxUrl": "http://fra1.flashrpc.com/be95e80d-afc2-4a48-b017-db021fc4c19e",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://fra1.flashrpc.com/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "blocxroute",
+ "sendTxUrl": "http://germany.solana.dex.blxrbdn.com/api/v2/submit",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://germany.solana.dex.blxrbdn.com/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+}
+```
+
+
+
+ Amsterdam
+
+```json
+{
+ "name": "helius",
+ "sendTxUrl": "http://ams-sender.helius-rpc.com/fast",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ams-sender.helius-rpc.com/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "0slot",
+ "sendTxUrl": "http://ams1.0slot.trade?api-key=3fec78a0d361418a8eff95be9ed85cc3&anti-mev=true",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ams1.0slot.trade/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "blockrazor",
+ "sendTxUrl": "amsterdam.solana-grpc.blockrazor.xyz:80",
+ "sendBundleUrl": "",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "node1",
+ "sendTxUrl": "http://ams.node1.me",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ams.node1.me/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "nextblock",
+ "sendTxUrl": "http://amsterdam.nextblock.io/api/v2/submit",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://amsterdam.nextblock.io/api/v2/ping",
+ "tips": "0.001",
+ "rateLimit": 4
+},
+{
+ "name": "flashBlock",
+ "sendTxUrl": "http://ams.flashblock.trade/api/v2/submit-batch",
+ "sendBundleUrl": "http://ams.flashblock.trade/api/v2/submit-batch",
+ "keepAliveUrl": "http://ams.flashblock.trade/api/v2/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "astralane",
+ "sendTxUrl": "http://ams.gateway.astralane.io/iris?api-key=zhaozNc5OIadLPI3r9nUVVPpCZcQAUjngO6Tgr5XUJcmBrIisFaaZF81Ijn01Ytn",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ams.gateway.astralane.io/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "nozomi",
+ "sendTxUrl": "http://ams1.nozomi.temporal.xyz/?c=34cff37e-f1a5-446a-98bb-66aa1b62cb74",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ams1.nozomi.temporal.xyz/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "stellium",
+ "sendTxUrl": "http://ams1.flashrpc.com/be95e80d-afc2-4a48-b017-db021fc4c19e",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ams1.flashrpc.com/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "blocxroute",
+ "sendTxUrl": "http://amsterdam.solana.dex.blxrbdn.com/api/v2/submit",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://amsterdam.solana.dex.blxrbdn.com/api/v2/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+}
+```
+
+
+
+ Newark
+
+```json
+{
+ "name": "helius",
+ "sendTxUrl": "http://ewr-sender.helius-rpc.com/fast",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ewr-sender.helius-rpc.com/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "0slot",
+ "sendTxUrl": "http://ny1.0slot.trade?api-key=3fec78a0d361418a8eff95be9ed85cc3&anti-mev=true",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ny1.0slot.trade/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "blockrazor",
+ "sendTxUrl": "newyork.solana-grpc.blockrazor.xyz:80",
+ "sendBundleUrl": "",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "node1",
+ "sendTxUrl": "http://ny.node1.me",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ny.node1.me/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "nextblock",
+ "sendTxUrl": "http://ny.nextblock.io/api/v2/submit",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ny.nextblock.io/api/v2/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+
+},
+{
+ "name": "flashBlock",
+ "sendTxUrl": "http://ny.flashblock.trade/api/v2/submit-batch",
+ "sendBundleUrl": "http://ny.flashblock.trade/api/v2/submit-batch",
+ "keepAliveUrl": "http://ny.flashblock.trade/api/v2/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "astralane",
+ "sendTxUrl": "http://ny.gateway.astralane.io/iris?api-key=zhaozNc5OIadLPI3r9nUVVPpCZcQAUjngO6Tgr5XUJcmBrIisFaaZF81Ijn01Ytn",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ny.gateway.astralane.io/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "nozomi",
+ "sendTxUrl": "http://ewr1.nozomi.temporal.xyz/?c=34cff37e-f1a5-446a-98bb-66aa1b62cb74",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ewr1.nozomi.temporal.xyz/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "stellium",
+ "sendTxUrl": "http://ewr1.flashrpc.com/be95e80d-afc2-4a48-b017-db021fc4c19e",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ewr1.flashrpc.com/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+},
+{
+ "name": "blocxroute",
+ "sendTxUrl": "http://ny.solana.dex.blxrbdn.com/api/v2/submit",
+ "sendBundleUrl": "",
+ "keepAliveUrl": "http://ny.solana.dex.blxrbdn.com/api/v2/ping",
+ "tips": "0.001",
+ "rateLimit": 0
+}
+```
+
+
+
+### Usage
+
+See [example](./cmd/send_tx/main.go).