Обновление Bitcoind сервера до 0.19
Обновление Bitcoind сервера до 0.19
Ниже приведены быстрые инструкции по обновлению bitcoind сервера:
$ wget https://bitcoincore.org/bin/bitcoin-core-0.19.1/bitcoin-0.19.1-x86_64-linux-gnu.tar.gz $ tar -zxvf bitcoin-0.19.1-x86_64-linux-gnu.tar.gz $ mv ~/bitcoin-0.19.1/bin/bitcoind /usr/bin/bitcoind $ mv ~/bitcoin-0.19.1/bin/bitcoin-cli /usr/bin/bitcoin-cli
Останавливаем сервер:
bitcoin-cli stop
Далее проверяем bitcoin.conf в ~/.bitcoin папке:
rpcuser=user rpcbind=127.0.0.1 rpcpassword=pass rpcport=8332 rpcallowip=127.0.0.1 server=1 shrinkdebuglog=1 prune=5500 keypool=100 addresstype=bech32
По сравнению с прошлыми версиями в конфигурационный файл был добавлен параметр rpcbind — устанавливает на какой адрес «повесить» bitcoind сервер.
Используем UFW firewall в Ubuntu
Используем UFW firewall в Ubuntu
UFW или uncomplicated firewall — утилита для конфигурирования межсетевого экрана. Написана командой Canonical и встроена по-умолчанию в Ubuntu. При помощи своей простоты позволяет быстро настроить сервер для противодействия разным атакам. Установлен ufw обычно из коробки.
Чтобы проверить статус работы достаточно написать:
$ > ufw status $ < Status: inactive
Добавим правила:
Форматирование даты во VueJS с MomentJS
Форматирование даты во VueJS с MomentJS
Волей судьбы начал работать плотно с фронтендом для проектов. Выбор пал на лёгкий в освоении VueJS.
В качестве одной из задач стоял вывод даты в определенном удобным человеку формате (вместо 2020-05-10T21:43:32.545448Z). Для этого используем Moment JS:
import moment from 'moment'
... ... ... ...
Vue.filter('formatDate', function (value) {
if (value) {
return moment(String(value)).format('MM/DD/YYYY hh:mm')
}
})
И далее в шаблоне отображения можем выводить данные при помощи зарегистрированного фильтра:
GitHub API — полезные примеры curl запросов с releases API
GitHub API — полезные примеры curl запросов с releases API
Очередная подборка полезных curl запросов для работы с GitHub API:
- Получить объект release с выбранным tag_name:
release="$(curl -s -X GET -H "Authorization:token ${GITHUB_TOKEN}" "https://api.github.com/repos/${GITHUB_REPO}/releases" | jq -r '.[] | select(.tag_name=='\""$TAG_NAME"\"')')" - Получить uploadUrl для загрузки нового asset в данный release объект:
uploadUrl="$(jq -r '.upload_url' <<< "${release}")" - Удаление asset из release:
existingAsset="$(curl -s -X GET -H "Authorization:token ${GITHUB_TOKEN}" "https://api.github.com/repos/${GITHUB_REPO}/releases/${releaseID}/assets" | jq -r '.[] | select(.name=='\""$ARTIFACT"\"')')" existingAssetID="$(jq -r '.id' <<< "${existingAsset}")" resp="$(curl -s -X DELETE -H "Authorization:token ${GITHUB_TOKEN}" -H "Content-Type:application/octet-stream" "https://api.github.com/repos/${GITHUB_REPO}/releases/assets/${existingAssetID}")" echo "$resp"Для работы bash снипетов необходимо установить расширение jq, добавить GITHUB_TOKEN и GITHUB_REPO.
Unit тесты для zap логгера в Golang
Unit тесты для zap логгера в Golang
Zap — популярная в Go лог система, написанная убером.
Задача, которая однажды встала передо мной — как проверить что все нужные сообщения логгера были вызваны в коде?
Для этого я нашел решение как сам zap тестирует свою логику — при помощи zap observer:
obs, logs := observer.New(zap.InfoLevel) logger := zap.New(obs)
Теперь нам нужно запустить наш код и потом проверить полученные сообщения логгера в observer:
Prometheus middleware для Chi
Prometheus middleware для Chi
Для вывода Prometheus метрик с роутера Chi нет официального Middleware. Поэтому установим расширение 766b/chi-prometheus:
// Init router
r := chi.NewRouter()
// Init middleware
...
r.Use(chiprometheus.NewMiddleware("my-api"))
...
// Init some routes
r.Get("/api", apiHandler)
Далее импортируем promhttp:
"github.com/prometheus/client_golang/prometheus/promhttp"
И регистрируем HTTP handler:
r.Handle("/metrics", promhttp.Handler())
И в принципе всё. Теперь все роуты будут проходить через chiprometheus и все данные роутера будут сохраняться для забора Prometheus.
Bitcoin alert — добавлена команда CURRENT
Bitcoin alert — добавлена команда CURRENT
При помощи Telegram бота Bitcoin-Alert можно получать актуальные изменения минимального-максимального курса криптовалют в течение определенного промежутка времени.
В Telegram бот была добавлена команда CURRENT для получения актуального курса:
> BTC CURRENT
< Current ticker: 6775.246094
Бот поддерживает Bitcoin, Litecoin, Ethereum.
Golang: FileServer для go-chi
Golang: FileServer для go-chi
Пример работы файлового сервера для go-chi:
r := chi.NewRouter()
... ... ...
fileServer(r)
... ... ...
// fileServer is serving static files.
func fileServer(router *chi.Mux) {
root := "./frontend"
fs := http.FileServer(http.Dir(root))
router.Get("/*", func(w http.ResponseWriter, r *http.Request) {
if _, err := os.Stat(root + r.RequestURI); os.IsNotExist(err) {
w.WriteHeader(http.StatusNotFound)
return
} else {
fs.ServeHTTP(w, r)
}
})
}
До начала работы нужно задать root — корневую папку для работы файлового сервера.
Bitcoin alert — Telegram бот для получения уведомлений по изменению цен BTC, LTC, ETH
Bitcoin alert — Telegram бот для получения уведомлений по изменению цен BTC, LTC, ETH
bitcoin-alert.visla.dev — новый сервис для доставки уведомлений по изменению цен крупнейших по капитализации криптовалют: Bitcoin, Litecoin, Ethereum.
Для получения уведомлений достаточно просто установить бота на свой аккаунт и выбрать нужную команду:
Например, хотим получать BTC сигналы:
И все! Бот будет уведомлять о всех крупных изменениях цен:
Сниппет: Отправка POST json в Golang
Сниппет: Отправка POST json в Golang
Сниппет для POST отправки JSON string:
var jsonStr = []byte(`{"price":9899}`)
req, err := http.NewRequest(http.MethodPost, "https://example.com", bytes.NewBuffer(jsonStr))
if err != nil {
...
}
response, err := http.DefaultClient.Do(req)
if err != nil {
...
}
defer response.Body.Close()
_, err = ioutil.ReadAll(response.Body)
if err != nil {
...
}

