# BSC
### 介紹
BSC Private Mempool推送BSC的隱私交易流數據。數據流基於SSE協議構建,數據流統一以bundle形式推送。數據流中的交易統一經脫敏處理,僅披露經授權允許披露的交易數據。
Private Mempool可應用於Backrun、跟單、狙擊等多種場景。
為避免由於網絡波動導致的數據斷流,建議建立重連機制。
### RPC端點
{% hint style="info" %}
請將訂閱bundle的域名與發送bundle的域名保持一致。如訂閱https://jp-bscscutum.blockrazor.xyz/stream,則將bundle發送至https://jp-bscscutum.blockrazor.xyz
{% endhint %}
{% hint style="info" %}
不同地區推送的隱私數據流不同,建議同時訂閱3個端點
{% endhint %}
| 地區 | 端點 |
|---|
| 東京 | https://jp-bscscutum.blockrazor.xyz/stream |
| 紐約 | https://us-bscscutum.blockrazor.xyz/stream |
| 法蘭克福 | https://ger-bscscutum.blockrazor.xyz/stream |
| 都柏林 | https://ire-bscscutum.blockrazor.xyz/stream |
### Authentication
為對API的請求做認證,請設置auth token,請求示例如下:
```json
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer " \
--data '{}' \
https://jp-bscscutum.blockrazor.xyz/stream
```
```
https://jp-bscscutum.blockrazor.xyz/stream?token=
```
示例中的\需在註冊BlockRazor後獲取,步驟如下:
1. 前往[https://www.blockrazor.io](https://www.blockrazor.io),在網頁右上角點擊【註冊】,系統跳轉至註冊頁
2. 在註冊頁輸入郵箱和密碼,點擊【註冊】,系統會向郵箱發送賬戶激活郵件
3. 前往郵箱,查看賬戶激活郵件,點擊賬戶激活鏈接
4. 成賬戶激活,前往登錄,查看賬戶信息,複製auth token
### 流控說明
| | Tier 4 | Tier 3 | Tier 2 | Tier 1 | Tier 0 |
| --- | ------ | ------ | --------- | --------- | --------- |
| 數據流 | - | - | 2 streams | 2 streams | 2 streams |
### Bundle類型
**Raw Bundle**
Raw Bundle是指尚未被跟隨策略交易的bundle,Raw Bundle中的交易來源於兩個渠道:
* 通過RPC `eth_sendRawTransaction`提交的交易,會由BlockRazor RPC自動構建為bundle推送至Private Mempool,該場景下的Raw Bundle僅包含一筆交易;
* 通過RPC `eth_sendMevBundle`提交的Raw Bundle,交易來自於公開內存池或自行構建,該場景下的Raw Bundle至多可包含50筆交易。
**Followed Bundle**
客戶端在對Raw Bundle執行backrun、跟單或狙擊策略後,可以通過開啟hint繼續將bundle披露至Private Mempool以執行嵌套的backrun策略。此時Private Mempool中的該類Bundle稱為Followed Bundle,包含raw bundle中的全部交易,以及1筆策略交易。
### 數據流結構
**Bundle**
| 參數 | 格式 | 備注 |
|---|
| chainID | string | ETH: 1, BSC:56 |
| hash | string | bundle hash,Private Mempool數據推流統一以bundle形式呈現 |
| txs | []tx | bundle中包含的交易 |
| nextBlockNumber | uint64 | 該bundle所在區塊號 |
| maxBlockNumber | uint64 | 該bundle有效的最大區塊號 |
| proxyBidContract | string | bundle競拍代理合約地址,競拍方法调用詳見 Backrun |
| refundAddress | string | 競拍方法的入參, 競拍金額將按比例返利至refundAddress |
| refundCfg | int | 競拍方法的入參 |
| state | []state | 虛擬機狀態對象的數據變化,查看數據流示例 |
**txs**
| 參數 | 格式 | 備注 |
|---|
| hash | string | 交易哈希 |
| from | string | 交易的發起方地址 |
| to | string | 交易的接收方地址 |
| value | hex | 交易value |
| nonce | uint64 | 交易nonce |
| calldata | string | 交易calldata |
| functionSelector | string | 合約函數簽名哈希的前4個字節 |
| logs | []log | 交易在執行過程中拋出的事件日誌 |
**log**
| 參數 | 格式 | 備注 |
|---|
| address | string | 触发事件的智能合约地址 |
| topics | []string | 事件日志的topcis |
| data | string | 非索引参数的存储区域 |
#### **state**
{% hint style="info" %}
默認數據推流中不包含state,如需獲取,請將訂閱地址修改為
Ethereum:https://ethscutum.blockrazor.xyz/stream?state=true
BSC:https://jp-bscscutum.blockrazor.xyz/stream?state=true
{% endhint %}
| 參數 | 格式 | 備註 |
|---|
| "0x7C3b……3cb9E2" | []string | 數據發生變化的狀態對象地址,可以是一個EOA地址或智能合約地址 |
| "0x935b……6cf608" | string | 狀態對象數據發生變化的Key |
| "0x0000……3ffc00" | string | 狀態對象數據變化後的Value |
### 數據流示例(默認)
```json
{
"chainID":"56" //ETH: 1, BSC:56
"hash":"0x2ba4c05436d4a48a0ce30341a3164b34b31c091a28ed62618f7b0512aba41f51" // bundle hash
"txs":[{
"hash":"0x2ba4c05436d4a48a0ce30341a3164b34b31c091a28ed62618f7b0512aba41f51"
"from":"0xB4647b856CB9C3856d559C885Bed8B43e0846a47"
"to":"0x0000000000000000000000000000000000001000"
"value":"0x1c4eda9192000"
"nonce":88036
"calldata":"0xf340fa01000000000000000000000000b4647b856cb9c3856d559c885bed8b43e0846a47"
"functionSelector":"0xe47d166c"
"logs":[
{
"address": "0x6c1bcf1b99d9f0819459dad661795802d232437e",
"topics": ["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"],
"data": "0x"
}
{
"address": "0x6c1bcf1b99d9f0819459dad661795802d232437e",
"topics": ["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"],
"data": "0x"
}
]
}]
"nextBlockNumber":39177841 //該bundle所在區塊號
"maxBlockNumber":39177941 //該bundle有效的最大區塊號
"proxyBidContract":"0x74Ce839c6aDff544139f27C1257D34944B794605" //Backrun競拍合約地址,調用合約的proxyBid方法可進行競拍
"refundAddress":"0x6c1bcf1b99d9f0819459dad661795802d232437e", //返利接收地址,競拍金額將按比例返利至refundAddress
"refundCfg":10380050 //返利配置
}
```
### 數據流示例(包含state)
{% hint style="info" %}
默認數據推流中不包含state,如需獲取,請將訂閱地址修改為
Ethereum:[https://eth.blockrazor.xyz/stream?state=true](https://eth.blockrazor.xyz/stream?state=true)
BSC:[https://bsc.blockrazor.xyz/stream?state=true](https://bsc.blockrazor.xyz/stream?state=true)
{% endhint %}
```json
{
"chainID":"56" //ETH: 1, BSC:56
"hash":"0x2ba4c05436d4a48a0ce30341a3164b34b31c091a28ed62618f7b0512aba41f51" // bundle hash
"txs":[{
"hash":"0x2ba4c05436d4a48a0ce30341a3164b34b31c091a28ed62618f7b0512aba41f51"
"from":"0xB4647b856CB9C3856d559C885Bed8B43e0846a47"
"to":"0x0000000000000000000000000000000000001000"
"value":"0x1c4eda9192000"
"nonce":88036
"calldata":"0xf340fa01000000000000000000000000b4647b856cb9c3856d559c885bed8b43e0846a47"
"functionSelector":"0xe47d166c"
"logs":[
{
"address": "0x6c1bcf1b99d9f0819459dad661795802d232437e",
"topics": ["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"],
"data": "0x"
}
{
"address": "0x6c1bcf1b99d9f0819459dad661795802d232437e",
"topics": ["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"],
"data": "0x"
}
]
}]
"nextBlockNumber":39177841 //該bundle所在區塊號
"maxBlockNumber":39177941 //該bundle有效的最大區塊號
"proxyBidContract":"0x74Ce839c6aDff544139f27C1257D34944B794605" //Scutum的bundle競拍合約地址,調用合約的proxyBid方法可進行競拍
"refundAddress":"0x6c1bcf1b99d9f0819459dad661795802d232437e", //返利接收地址,競拍金額將按比例返利至refundAddress
"refundCfg":10380050 //返利配置
"state": {
"0x7C3b00CB3B40Cc77d88329A58574E29cFA3cb9E2": { //數據發生變化的狀態對象地址,可以是一個EOA地址或智能合約地址
"0x935b605129a438014d6ae0692623c5e1fbf83d5a631f5a0f8489a301966cf608": "0x00000000000000000000000000000000000000000000010c86a7e418723ffc00"
//"狀態對象數據發生變化的Key":"狀態對象數據變化後的Value"
}
}
}
```