├── .yardopts ├── .rspec ├── spec ├── fixtures │ └── response.json └── binance │ └── spot │ ├── market │ ├── ping_spec.rb │ ├── time_spec.rb │ ├── avg_price_spec.rb │ ├── ticker_24hr_spec.rb │ ├── ticker_price_spec.rb │ └── book_ticker_spec.rb │ ├── wallet │ ├── system_status_spec.rb │ ├── account_info.rb │ ├── wallet_balance.rb │ ├── delist_schedule.rb │ ├── user_delegation_history.rb │ ├── get_assets_converted_into_bnb.rb │ ├── coin_info_spec.rb │ ├── one_click_arrival_deposit_apply.rb │ ├── enable_fast_withdraw_spec.rb │ ├── disable_fast_withdraw_spec.rb │ ├── cloud_mining_payment_and_refund_history.rb │ ├── get_user_asset_spec.rb │ ├── dust_log_spec.rb │ ├── asset_devidend_record_spec.rb │ ├── trade_fee_spec.rb │ ├── asset_detail_spec.rb │ ├── account_status_spec.rb │ ├── funding_wallet_spec.rb │ ├── api_key_permission_spec.rb │ ├── api_trading_status_spec.rb │ ├── deposit_history_spec.rb │ └── withdraw_history_spec.rb │ ├── mining │ ├── mining_algo_list_spec.rb │ ├── mining_coin_list_spec.rb │ └── mining_resale_list_spec.rb │ ├── loan │ ├── get_loan_history.rb │ ├── get_loan_borrow_history.rb │ ├── get_loan_repayment_history.rb │ ├── get_loan_ltv_adjustment_history.rb │ ├── get_flexible_loan_borrow_history.rb │ ├── get_flexible_loan_ongoing_orders.rb │ ├── get_flexible_loan_repayment_history.rb │ ├── get_flexible_loan_assets_data.rb │ ├── get_flexible_loan_ltv_adjustment_history.rb │ └── get_flexible_loan_collateral_data.rb │ ├── convert │ ├── convert_order_status.rb │ ├── convert_asset_info.rb │ ├── convert_limit_query_open_orders.rb │ └── convert_exchange_info.rb │ ├── stream │ ├── new_margin_listen_key_spec.rb │ ├── new_listen_key_spec.rb │ ├── renew_listen_key_spec.rb │ ├── delete_listen_key_spec.rb │ ├── delete_margin_listen_key_spec.rb │ └── renew_margin_listen_key_spec.rb │ ├── subaccount │ ├── sub_account_list.rb │ ├── sub_account_status_sepc.rb │ ├── sub_account_margin_account_summary_spec.rb │ ├── get_sub_account_assets_spec.rb │ ├── get_sub_account_list_spec.rb │ ├── sub_account_transfer_sub_account_history_spec.rb │ ├── sub_account_asset_details_spec.rb │ ├── sub_account_enable_margin_spec.rb │ ├── sub_account_enable_futures_spec.rb │ ├── sub_account_margin_account_spec.rb │ ├── get_sub_account_spot_summary_spec.rb │ ├── universal_transfer_history_spec.rb │ ├── create_virtual_sub_account_spec.rb │ └── sub_account_futures_account_summary_spec.rb │ ├── margin │ ├── margin_all_pairs_spec.rb │ ├── margin_all_assets_spec.rb │ ├── margin_leverage_bracket.rb │ ├── margin_open_orders_spec.rb │ ├── margin_transfer_history_spec.rb │ ├── margin_interest_history.rb │ ├── margin_account_spec.rb │ ├── margin_force_liquidation_record_spec.rb │ ├── toggle_bnb_burn_spec.rb │ ├── margin_get_oco_spec.rb │ ├── margin_get_open_oco_spec.rb │ ├── margin_get_all_oco_spec.rb │ ├── margin_price_index_spec.rb │ ├── margin_cancel_oco_spec.rb │ ├── get_bnb_burn_spec.rb │ ├── margin_cancel_all_order_spec.rb │ ├── get_isolated_margin_account_limit_spec.rb │ ├── get_cross_margin_data_spec.rb │ └── enable_isolated_margin_account_spec.rb │ ├── trade │ ├── account_spec.rb │ ├── open_orders_spec.rb │ ├── get_order_rate_limit_spec.rb │ └── open_order_list_spec.rb │ ├── fiat │ ├── fiat_payment_history_spec.rb │ └── fiat_deposit_withdraw_history_spec.rb │ └── simple_earn │ ├── simple_earn_account_spec.rb │ └── collateral_record_spec.rb ├── lib ├── binance │ ├── version.rb │ ├── utils │ │ ├── faraday │ │ │ ├── middleware.rb │ │ │ └── middleware │ │ │ │ ├── rsa_signature.rb │ │ │ │ ├── timestamp.rb │ │ │ │ └── hmac_signature.rb │ │ ├── url.rb │ │ └── validation.rb │ ├── authentication.rb │ ├── error.rb │ └── spot │ │ └── c2c.rb └── binance.rb ├── bin ├── setup └── console ├── .gitignore ├── examples ├── common.rb ├── spot │ ├── wallet │ │ ├── system_status.rb │ │ ├── coin_info.rb │ │ ├── dust_log.rb │ │ ├── trade_fee.rb │ │ ├── account_info.rb │ │ ├── account_status.rb │ │ ├── asset_detail.rb │ │ ├── funding_wallet.rb │ │ ├── wallet_balance.rb │ │ ├── delist_schedule.rb │ │ ├── api_key_permission.rb │ │ ├── api_trading_status.rb │ │ ├── deposit_address.rb │ │ ├── deposit_history.rb │ │ ├── disable_fast_withdraw.rb │ │ ├── enable_fast_withdraw.rb │ │ ├── account_snapshot.rb │ │ ├── dust_transfer.rb │ │ ├── withdraw_history.rb │ │ ├── deposit_address_list.rb │ │ ├── get_assets_converted_into_bnb.rb │ │ ├── one_click_arrival_deposit_apply.rb │ │ ├── get_user_asset.rb │ │ ├── cloud_mining_payment_and_refund_history.rb │ │ ├── user_universal_transfer_history.rb │ │ ├── asset_devidend_record.rb │ │ ├── user_universal_transfer.rb │ │ ├── user_delegation_history.rb │ │ └── withdraw.rb │ ├── margin │ │ ├── margin_account.rb │ │ ├── margin_all_assets.rb │ │ ├── margin_all_pairs.rb │ │ ├── margin_open_orders.rb │ │ ├── get_bnb_burn.rb │ │ ├── margin_all_orders.rb │ │ ├── margin_get_all_oco.rb │ │ ├── margin_my_trades.rb │ │ ├── margin_price_index.rb │ │ ├── get_cross_margin_data.rb │ │ ├── margin_get_open_oco.rb │ │ ├── margin_leverage_bracket.rb │ │ ├── margin_max_borrowable.rb │ │ ├── margin_max_transferable.rb │ │ ├── margin_order.rb │ │ ├── get_margin_order_usage.rb │ │ ├── get_isolated_margin_data.rb │ │ ├── margin_get_oco.rb │ │ ├── toggle_bnb_burn.rb │ │ ├── get_isolated_margin_account.rb │ │ ├── get_all_isolated_margin_pairs.rb │ │ ├── margin_available_inventory.rb │ │ ├── margin_borrow_repay_record.rb │ │ ├── margin_manual_liquidation.rb │ │ ├── margin_transfer_history.rb │ │ ├── get_isolated_margin_account_limit.rb │ │ ├── get_margin_interest_rate_history.rb │ │ ├── margin_cancel_all_order.rb │ │ ├── margin_force_liquidation_record.rb │ │ ├── margin_interest_history.rb │ │ ├── margin_cancel_oco.rb │ │ ├── disable_isolated_margin_account.rb │ │ ├── enable_isolated_margin_account.rb │ │ ├── margin_borrow_repay.rb │ │ ├── get_isolated_margin_tier.rb │ │ ├── margin_cancel_order.rb │ │ ├── margin_new_order.rb │ │ └── margin_oco_order.rb │ ├── market │ │ ├── ping.rb │ │ ├── time.rb │ │ ├── avg_price.rb │ │ ├── klines.rb │ │ ├── ui_klines.rb │ │ ├── depth.rb │ │ ├── book_ticker.rb │ │ ├── ticker_24hr.rb │ │ ├── trades.rb │ │ ├── ticker_price.rb │ │ ├── ticker_trading_day.rb │ │ ├── ticker.rb │ │ ├── exchange_info.rb │ │ ├── agg_trades.rb │ │ └── historical_trades.rb │ ├── subaccount │ │ ├── sub_account_list.rb │ │ ├── sub_account_status.rb │ │ ├── get_sub_account_list.rb │ │ ├── universal_transfer_history.rb │ │ ├── get_sub_account_assets.rb │ │ ├── get_sub_account_spot_summary.rb │ │ ├── get_sub_account_assets_v4.rb │ │ ├── sub_account_asset_details.rb │ │ ├── sub_account_enable_futures.rb │ │ ├── sub_account_enable_margin.rb │ │ ├── sub_account_enable_options.rb │ │ ├── sub_account_margin_account.rb │ │ ├── sub_account_deposit_history.rb │ │ ├── sub_account_margin_account_summary.rb │ │ ├── create_virtual_sub_account.rb │ │ ├── get_sub_account_spot_transfer_history.rb │ │ ├── sub_account_deposit_address.rb │ │ ├── sub_account_enable_blvt.rb │ │ ├── sub_account_futures_asset_details.rb │ │ ├── sub_account_margin_asset_details.rb │ │ ├── sub_account_transaction_statistics.rb │ │ ├── sub_account_futures_account.rb │ │ ├── sub_account_transfer_sub_account_history.rb │ │ ├── deposit_to_sub_account.rb │ │ ├── sub_account_futures_account_summary.rb │ │ ├── sub_account_futures_position_risk.rb │ │ ├── sub_account_ip_list.rb │ │ ├── withdraw_from_sub_account.rb │ │ ├── get_sub_account_futures_transfer_history.rb │ │ ├── universal_transfer.rb │ │ ├── sub_account_delete_ip_list.rb │ │ ├── sub_account_transfer_to_master.rb │ │ ├── sub_account_toggle_ip_restriction.rb │ │ ├── sub_account_transfer_log.rb │ │ ├── sub_account_futures_internal_transfer.rb │ │ ├── sub_account_transfer_log_sub_account.rb │ │ ├── sub_account_transfer_log_investor.rb │ │ ├── sub_account_transfer_to_sub.rb │ │ ├── sub_account_margin_transfer.rb │ │ └── sub_account_futures_transfer.rb │ ├── simple_earn │ │ ├── collateral_record.rb │ │ ├── locked_product_list.rb │ │ ├── simple_earn_account.rb │ │ ├── flexible_product_list.rb │ │ ├── locked_product_position.rb │ │ ├── locked_redemption_record.rb │ │ ├── locked_rewards_history.rb │ │ ├── rate_history.rb │ │ ├── flexible_product_position.rb │ │ ├── flexible_redemption_record.rb │ │ ├── locked_subscription_record.rb │ │ ├── flexible_subscription_record.rb │ │ ├── flexible_rewards_history.rb │ │ ├── locked_redeem_product.rb │ │ ├── flexible_redeem_product.rb │ │ ├── locked_subscribe.rb │ │ ├── flexible_subscribe.rb │ │ ├── flexible_personal_left_quota.rb │ │ ├── locked_personal_left_quota.rb │ │ ├── locked_redeem_option.rb │ │ ├── locked_auto_subscribe.rb │ │ ├── flexible_auto_subscribe.rb │ │ ├── flexible_subscription_preview.rb │ │ └── locked_subscription_preview.rb │ ├── loan │ │ ├── get_loan_borrow_history.rb │ │ ├── get_loan_history.rb │ │ ├── get_loan_repayment_history.rb │ │ ├── get_flexible_loan_assets_data.rb │ │ ├── get_loan_ltv_adjustment_history.rb │ │ ├── get_flexible_loan_borrow_history.rb │ │ ├── get_flexible_loan_collateral_data.rb │ │ ├── get_flexible_loan_ongoing_orders.rb │ │ ├── get_flexible_loan_repayment_history.rb │ │ ├── get_flexible_loan_ltv_adjustment_history.rb │ │ ├── borrow_flexible_loan.rb │ │ ├── repay_flexible_loan.rb │ │ └── adjust_flexible_loan_ltv.rb │ ├── convert │ │ ├── convert_asset_info.rb │ │ ├── convert_order_status.rb │ │ ├── convert_exchange_info.rb │ │ ├── convert_accept_quote.rb │ │ ├── convert_limit_query_open_orders.rb │ │ ├── convert_limit_cancel_order.rb │ │ ├── convert_get_quote.rb │ │ ├── convert_trade_flow.rb │ │ └── convert_limit_place_order.rb │ ├── stream │ │ ├── new_listen_key.rb │ │ ├── delete_listen_key.rb │ │ ├── renew_listen_key.rb │ │ ├── new_margin_listen_key.rb │ │ ├── delete_margin_listen_key.rb │ │ └── renew_margin_listen_key.rb │ ├── c2c │ │ └── c2c_trade_history.rb │ ├── mining │ │ ├── mining_algo_list.rb │ │ ├── mining_coin_list.rb │ │ ├── mining_resale_list.rb │ │ ├── mining_extra_bonus.rb │ │ ├── mining_worker_list.rb │ │ ├── mining_account_list.rb │ │ ├── mining_resale_detail.rb │ │ ├── mining_revenue_list.rb │ │ ├── mining_worker.rb │ │ ├── mining_statistics_list.rb │ │ ├── mining_resale_cancel.rb │ │ └── mining_resale_request.rb │ ├── fiat │ │ ├── fiat_payment_history.rb │ │ └── fiat_deposit_withdraw_history.rb │ └── trade │ │ ├── order_list.rb │ │ ├── get_order_rate_limit.rb │ │ ├── commission_rate.rb │ │ ├── my_allocations.rb │ │ ├── cancel_open_orders.rb │ │ ├── cancel_order.rb │ │ ├── my_prevented_matches.rb │ │ ├── open_order_list.rb │ │ ├── cancel_order_list.rb │ │ ├── open_orders.rb │ │ ├── all_orders.rb │ │ ├── my_trades.rb │ │ ├── all_order_list.rb │ │ ├── get_order.rb │ │ ├── new_oco_order.rb │ │ ├── new_order.rb │ │ ├── cancel_replace.rb │ │ └── new_order_test.rb └── websocket │ └── spot │ ├── trade.rb │ ├── agg_trade.rb │ ├── kline.rb │ ├── diff_book_depth.rb │ ├── partial_book_depth.rb │ ├── rolling_window_ticker.rb │ ├── rolling_window_ticker_all_symbols.rb │ ├── user_data.rb │ ├── book_ticker.rb │ ├── mini_ticker.rb │ ├── symbol_ticker.rb │ └── subscribe.rb ├── Rakefile ├── Gemfile └── .github ├── ISSUE_TAMPLATE.md └── workflows ├── ruby.yml └── release.yml /.yardopts: -------------------------------------------------------------------------------- 1 | --no-private lib/binance/spot/ -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | --format documentation 2 | --color 3 | --require spec_helper 4 | --fail-fast 5 | -------------------------------------------------------------------------------- /spec/fixtures/response.json: -------------------------------------------------------------------------------- 1 | { 2 | "key1": "value1", 3 | "key2": "value2" 4 | } 5 | -------------------------------------------------------------------------------- /lib/binance/version.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Binance 4 | VERSION = '1.7.1' 5 | end 6 | -------------------------------------------------------------------------------- /lib/binance.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'json' 4 | require 'binance/version' 5 | require 'binance/spot' 6 | -------------------------------------------------------------------------------- /bin/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | IFS=$'\n\t' 4 | set -vx 5 | 6 | bundle install 7 | 8 | # Do any other automated setup that you need to do here 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.bundle/ 2 | /.yardoc 3 | /_yardoc/ 4 | /coverage/ 5 | /doc/ 6 | /pkg/ 7 | /spec/reports/ 8 | /tmp/ 9 | 10 | # rspec failure tracking 11 | .rspec_status 12 | 13 | .ruby-version 14 | -------------------------------------------------------------------------------- /lib/binance/utils/faraday/middleware.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require_relative './middleware/timestamp' 4 | require_relative './middleware/rsa_signature' 5 | require_relative './middleware/hmac_signature' 6 | -------------------------------------------------------------------------------- /examples/common.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # common module for examples 4 | module Common 5 | class << self 6 | def setup_logger 7 | require 'logger' 8 | logger = Logger.new($stdout) 9 | logger.level = Logger::INFO 10 | logger 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'bundler/gem_tasks' 4 | require 'rspec/core/rake_task' 5 | 6 | RSpec::Core::RakeTask.new(:spec) 7 | 8 | task default: :spec 9 | 10 | desc 'Release a new gem version' 11 | task :release do 12 | sh('gem bump --file lib/binance/version.rb') 13 | end 14 | -------------------------------------------------------------------------------- /examples/spot/wallet/system_status.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new 12 | logger.info(client.system_status) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/coin_info.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.coin_info) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/dust_log.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.dust_log) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/trade_fee.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.trade_fee) 13 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.margin_account) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/account_info.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.account_info) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/account_status.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.account_status) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/asset_detail.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.asset_detail) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/funding_wallet.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.funding_wallet) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/wallet_balance.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.wallet_balance) 13 | -------------------------------------------------------------------------------- /examples/spot/market/ping.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(base_url: 'https://testnet.binance.vision') 12 | logger.info(client.ping) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/delist_schedule.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.delist_schedule) 13 | -------------------------------------------------------------------------------- /examples/spot/market/time.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(base_url: 'https://testnet.binance.vision') 12 | 13 | logger.info(client.time) 14 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_list) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/api_key_permission.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.api_key_permission) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/api_trading_status.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.api_trading_status) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/collateral_record.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.collateral_record) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_product_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_product_list) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/simple_earn_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.simple_earn_account) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_status.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_status) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/deposit_address.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.deposit_address(coin: 'BNB')) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/deposit_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.deposit_history(coin: 'BNB')) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/disable_fast_withdraw.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.disable_fast_withdraw) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/enable_fast_withdraw.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.enable_fast_withdraw) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_product_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_product_list) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/get_sub_account_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.get_sub_account_list) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/account_snapshot.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.account_snapshot(type: 'SPOT')) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/dust_transfer.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.dust_transfer(asset: %w[EOS BCH])) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/withdraw_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.withdraw_history(coin: 'BNB')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_product_position.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_product_position) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_redemption_record.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_redemption_record) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_rewards_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_rewards_history) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/rate_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.rate_history(productId: 'BTC001')) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/deposit_address_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.deposit_address_list(coin: 'BNB')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_product_position.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_product_position) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_redemption_record.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_redemption_record) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_subscription_record.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_subscription_record) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/universal_transfer_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.universal_transfer_history) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/get_assets_converted_into_bnb.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.get_assets_converted_into_bnb) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_subscription_record.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_subscription_record) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/get_sub_account_assets.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.get_sub_account_assets(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/get_sub_account_spot_summary.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.get_sub_account_spot_summary) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/one_click_arrival_deposit_apply.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.one_click_arrival_deposit_apply) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_rewards_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_rewards_history(type: 'BONUS')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_redeem_product.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_redeem_product(positionId: '1234')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/get_sub_account_assets_v4.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.get_sub_account_assets_v4(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_asset_details.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_asset_details(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_enable_futures.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_enable_futures(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_enable_margin.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_enable_margin(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_enable_options.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_enable_options(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_margin_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_margin_account(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/get_user_asset.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.get_user_asset(asset: 'BNB', needBtcValuation: true)) 13 | -------------------------------------------------------------------------------- /examples/spot/market/avg_price.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 12 | logger.info(client.avg_price(symbol: 'BTCUSDT')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_redeem_product.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_redeem_product(productId: 'BTC001')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_subscribe.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_subscribe(projectId: 'Bnb*120', amount: 1.0)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_deposit_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_deposit_history(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_margin_account_summary.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_margin_account_summary) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_subscribe.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_subscribe(productId: 'BTC001', amount: 0.01)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/create_virtual_sub_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.create_virtual_sub_account(subAccountString: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/get_sub_account_spot_transfer_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.get_sub_account_spot_transfer_history) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/cloud_mining_payment_and_refund_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.cloud_mining_payment_and_refund_history) 13 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_all_assets.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_all_assets) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_all_pairs.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_all_pairs) 15 | -------------------------------------------------------------------------------- /examples/spot/market/klines.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 12 | logger.info(client.klines(symbol: 'BTCUSDT', interval: '1m')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_personal_left_quota.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_personal_left_quota(productId: 'BTC001')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_personal_left_quota.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_personal_left_quota(projectId: 'Bnb*120')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_redeem_option.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_redeem_option(positionId: '1234', redeemTo: 'SPOT')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_deposit_address.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_deposit_address(email: '', coin: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_enable_blvt.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_enable_blvt(email: '', enableBlvt: true)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_futures_asset_details.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_futures_asset_details(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_margin_asset_details.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_margin_asset_details(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_transaction_statistics.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_transaction_statistics(email: '')) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/user_universal_transfer_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.user_universal_transfer_history(type: 'MAIN_MARGIN')) 13 | -------------------------------------------------------------------------------- /examples/spot/loan/get_loan_borrow_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_loan_borrow_history) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/get_loan_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_loan_history(asset: 'USDT')) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_open_orders.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_open_orders) 15 | -------------------------------------------------------------------------------- /examples/spot/market/ui_klines.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 12 | logger.info(client.ui_klines(symbol: 'BTCUSDT', interval: '1m')) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_auto_subscribe.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_auto_subscribe(positionId: '1234', autoSubscribe: true)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_futures_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_futures_account(email: '', futuresType: 1)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_transfer_sub_account_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_transfer_sub_account_history) 13 | -------------------------------------------------------------------------------- /examples/spot/loan/get_loan_repayment_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_loan_repayment_history) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/get_bnb_burn.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.get_bnb_burn) 16 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_auto_subscribe.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_auto_subscribe(productId: '1234', autoSubscribe: true)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/deposit_to_sub_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.deposit_to_sub_account(toEmail: '', asset: 'USDT', amount: 0.01)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_futures_account_summary.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_futures_account_summary(futuresType: 1)) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/asset_devidend_record.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | param = { 13 | asset: 'BNB' 14 | } 15 | logger.info(client.asset_devidend_record(param)) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/get_flexible_loan_assets_data.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_flexible_loan_assets_data) 16 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/flexible_subscription_preview.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.flexible_subscription_preview(productId: 'BTC001', amount: 1.0)) 13 | -------------------------------------------------------------------------------- /examples/spot/simple_earn/locked_subscription_preview.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.locked_subscription_preview(projectId: 'Bnb*120', amount: 1.0)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_futures_position_risk.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_futures_position_risk(email: '', futuresType: 1)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_ip_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_ip_list(email: 'alice@test.com', subAccountApiKey: 'xxxxxx')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/withdraw_from_sub_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.withdraw_from_sub_account(fromEmail: '', asset: 'USDT', amount: 0.01)) 13 | -------------------------------------------------------------------------------- /examples/spot/wallet/user_universal_transfer.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.user_universal_transfer(type: 'MAIN_MARGIN', asset: 'USDT', amount: 0.1)) 13 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_asset_info.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_asset_info) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/get_loan_ltv_adjustment_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_loan_ltv_adjustment_history) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_all_orders.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_all_orders(symbol: 'BNBUSDT')) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_get_all_oco.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.margin_get_all_oco) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_my_trades.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_my_trades(symbol: 'BNBUSDT')) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_price_index.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_price_index(symbol: 'BNBUSDT')) 15 | -------------------------------------------------------------------------------- /examples/spot/stream/new_listen_key.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | 14 | key = '' 15 | client = Binance::Spot.new(key: key) 16 | 17 | logger.info(client.new_listen_key) 18 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_order_status.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_order_status) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/get_flexible_loan_borrow_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_flexible_loan_borrow_history) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/get_flexible_loan_collateral_data.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_flexible_loan_collateral_data) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/get_flexible_loan_ongoing_orders.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_flexible_loan_ongoing_orders) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/get_cross_margin_data.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.get_cross_margin_data) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_get_open_oco.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.margin_get_open_oco) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_leverage_bracket.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | logger.info(client.margin_leverage_bracket) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_max_borrowable.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_max_borrowable(asset: 'BNB')) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_max_transferable.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_max_transferable(asset: 'BNB')) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_order(symbol: 'BNBUSDT', orderId: '')) 15 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_exchange_info.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_exchange_info) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/get_flexible_loan_repayment_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_flexible_loan_repayment_history) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/get_margin_order_usage.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.get_margin_order_usage) 16 | -------------------------------------------------------------------------------- /examples/spot/stream/delete_listen_key.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | 14 | key = '' 15 | client = Binance::Spot.new(key: key) 16 | 17 | logger.info(client.delete_listen_key('')) 18 | -------------------------------------------------------------------------------- /examples/spot/stream/renew_listen_key.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | 14 | key = '' 15 | client = Binance::Spot.new(key: key) 16 | 17 | logger.info(client.renew_listen_key('')) 18 | -------------------------------------------------------------------------------- /examples/spot/subaccount/get_sub_account_futures_transfer_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.get_sub_account_futures_transfer_history(email: '', futuresType: 1)) 13 | -------------------------------------------------------------------------------- /examples/spot/c2c/c2c_trade_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.c2c_trade_history(tradeType: 'BUY')) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/get_isolated_margin_data.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.get_isolated_margin_data) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_get_oco.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.margin_get_oco(orderListId: 12_345)) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/toggle_bnb_burn.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.toggle_bnb_burn(spotBNBBurn: 'true')) 16 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_algo_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_algo_list) 15 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_coin_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_coin_list) 15 | -------------------------------------------------------------------------------- /examples/spot/stream/new_margin_listen_key.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | 14 | key = '' 15 | client = Binance::Spot.new(key: key) 16 | 17 | logger.info(client.new_margin_listen_key) 18 | -------------------------------------------------------------------------------- /examples/spot/wallet/user_delegation_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.user_delegation_history(email: '', startTime: 1_640_998_861_000, endTime: 1_646_096_461_000)) 13 | -------------------------------------------------------------------------------- /examples/spot/loan/get_flexible_loan_ltv_adjustment_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.get_flexible_loan_ltv_adjustment_history) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/get_isolated_margin_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.get_isolated_margin_account) 16 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_resale_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_resale_list) 15 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_accept_quote.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_accept_quote(quoteId: '1234')) 16 | -------------------------------------------------------------------------------- /examples/spot/fiat/fiat_payment_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.fiat_payment_history(transactionType: 0)) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/get_all_isolated_margin_pairs.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.get_all_isolated_margin_pairs) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_available_inventory.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | logger.info(client.margin_available_inventory(type: 'MARGIN')) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_borrow_repay_record.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | logger.info(client.margin_borrow_repay_record(type: 'BORROW')) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_manual_liquidation.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | logger.info(client.margin_manual_liquidation(type: 'MARGIN')) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_transfer_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_transfer_history(asset: 'BNB', type: 'ROLL_IN')) 15 | -------------------------------------------------------------------------------- /examples/spot/stream/delete_margin_listen_key.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | 14 | key = '' 15 | client = Binance::Spot.new(key: key) 16 | 17 | logger.info(client.delete_margin_listen_key('')) 18 | -------------------------------------------------------------------------------- /examples/spot/stream/renew_margin_listen_key.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | 14 | key = '' 15 | client = Binance::Spot.new(key: key) 16 | 17 | logger.info(client.renew_margin_listen_key('')) 18 | -------------------------------------------------------------------------------- /examples/spot/subaccount/universal_transfer.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.universal_transfer(fromAccountType: 'SPOT', toAccountType: 'COIN_FUTURE', asset: 'USDT', amount: 0.01)) 13 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_limit_query_open_orders.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_limit_query_open_orders) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/get_isolated_margin_account_limit.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.get_isolated_margin_account_limit) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/get_margin_interest_rate_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | 15 | logger.info(client.get_margin_interest_rate_history(asset: 'BNB')) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_cancel_all_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.margin_cancel_all_order(symbol: 'BNBUSDT')) 16 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_delete_ip_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_delete_ip_list(email: 'alice@test.com', subAccountApiKey: 'xxxxxx', ipAddress: '1.2.3.4')) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_transfer_to_master.rb: -------------------------------------------------------------------------------- 1 | # !/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | params = { 13 | asset: '', 14 | amount: 1 15 | } 16 | logger.info(client.sub_account_transfer_to_master(**params)) 17 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_limit_cancel_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_limit_cancel_order(orderId: '1234')) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/borrow_flexible_loan.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.borrow_flexible_loan(loanCoin: 'BUSD', collateralCoin: 'BNB', loanAmount: 1.0)) 16 | -------------------------------------------------------------------------------- /examples/spot/loan/repay_flexible_loan.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.repay_flexible_loan(loanCoin: 'BUSD', collateralCoin: 'BNB', repayAmount: 1.0)) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_force_liquidation_record.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_force_liquidation_record(startTime: '1581783387615')) 15 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_interest_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.margin_interest_history(asset: 'BNB', startTime: '1581783387615')) 15 | -------------------------------------------------------------------------------- /examples/spot/market/depth.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(base_url: 'https://testnet.binance.vision') 12 | logger.info(client.depth(symbol: 'BTCUSDT')) 13 | 14 | # with limit 15 | logger.info(client.depth(symbol: 'BTCUSDT', limit: 5)) 16 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_toggle_ip_restriction.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_toggle_ip_restriction(email: 'alice@test.com', subAccountApiKey: 'xxxxxx', status: '1')) 13 | -------------------------------------------------------------------------------- /examples/spot/fiat/fiat_deposit_withdraw_history.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.fiat_deposit_withdraw_history(transactionType: 0)) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_cancel_oco.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.margin_cancel_oco(symbol: 'BNBUSDT', orderListId: 12_345)) 16 | -------------------------------------------------------------------------------- /examples/spot/market/book_ticker.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 12 | 13 | logger.info(client.book_ticker) 14 | 15 | # with symbol 16 | logger.info(client.book_ticker(symbol: 'BTCUSDT')) 17 | -------------------------------------------------------------------------------- /examples/spot/market/ticker_24hr.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 12 | 13 | logger.info(client.ticker_24hr) 14 | 15 | # with symbol 16 | logger.info(client.ticker_24hr(symbol: 'BTCUSDT')) 17 | -------------------------------------------------------------------------------- /examples/spot/market/trades.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(base_url: 'https://testnet.binance.vision') 12 | logger.info(client.trades(symbol: 'BTCUSDT')) 13 | 14 | # with limit 15 | logger.info(client.trades(symbol: 'BTCUSDT', limit: 5)) 16 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_transfer_log.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_transfer_log(email: '', startTime: 1_640_998_861_000, endTime: 1_646_096_461_000, page: 1, limit: 10)) 13 | -------------------------------------------------------------------------------- /bin/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | require 'bundler/setup' 5 | require 'binance' 6 | 7 | # You can add fixtures and/or initialization code here to make experimenting 8 | # with your gem easier. You can also use a different console, if you like. 9 | 10 | # (If you use this, don't forget to add pry to your Gemfile!) 11 | # require "pry" 12 | # Pry.start 13 | 14 | require 'irb' 15 | IRB.start(__FILE__) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/disable_isolated_margin_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.disable_isolated_margin_account(symbol: 'BNBUSDT')) 16 | -------------------------------------------------------------------------------- /examples/spot/margin/enable_isolated_margin_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.enable_isolated_margin_account(symbol: 'BNBUSDT')) 16 | -------------------------------------------------------------------------------- /examples/spot/market/ticker_price.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 12 | 13 | logger.info(client.ticker_price) 14 | 15 | # with symbol 16 | logger.info(client.ticker_price(symbol: 'BTCUSDT')) 17 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_get_quote.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_get_quote(fromAsset: 'BNB', toAsset: 'USDT', fromAmount: 1.0)) 16 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_extra_bonus.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_extra_bonus(algo: 'sha256', userName: '')) 15 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_worker_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_worker_list(algo: 'sha256', userName: '')) 15 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_futures_internal_transfer.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_futures_internal_transfer(fromEmail: '', toEmail: '', futuresType: 1, asset: 'USDT', amount: 0.01)) 13 | -------------------------------------------------------------------------------- /examples/spot/market/ticker_trading_day.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 12 | 13 | logger.info(client.ticker_price) 14 | 15 | # with symbol 16 | logger.info(client.ticker_trading_day(symbol: 'BNBUSDT')) 17 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_account_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_account_list(algo: 'sha256', userName: '')) 15 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_resale_detail.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_resale_detail(configId: '', userName: '')) 15 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_revenue_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_revenue_list(algo: 'sha256', userName: '')) 15 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_worker.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_worker(algo: 'sha256', userName: '', workerName: '')) 15 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_transfer_log_sub_account.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_transfer_log_sub_account(startTime: 1_640_998_861_000, endTime: 1_646_096_461_000, page: 1, limit: 10)) 13 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_trade_flow.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_trade_flow(startTime: 1_640_998_861_000, endTime: 1_646_096_461_000)) 16 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_statistics_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_statistics_list(algo: 'sha256', userName: '')) 15 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_transfer_log_investor.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | logger.info(client.sub_account_transfer_log_investor(email: '', startTime: 1_640_998_861_000, endTime: 1_646_096_461_000, page: 1, limit: 10)) 13 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_transfer_to_sub.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | params = { 13 | toEmail: 'alice@test.com', 14 | asset: 'BNB', 15 | amount: 1 16 | } 17 | logger.info(client.sub_account_transfer_to_sub(**params)) 18 | -------------------------------------------------------------------------------- /examples/spot/market/ticker.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new 12 | 13 | # single symbol 14 | # logger.info(client.ticker(symbol: 'btcusdt', windowSize: '1d')) 15 | 16 | # multi symbols 17 | logger.info(client.ticker(symbols: %w[btcusdt btcbusd], windowSize: '1d')) 18 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source 'https://rubygems.org' 4 | 5 | gemspec 6 | 7 | gem 'faraday' 8 | gem 'websocket-eventmachine-client' 9 | 10 | group :dev do 11 | gem 'rake', '>= 13.0.0' 12 | gem 'yard' 13 | end 14 | 15 | group :test do 16 | gem 'rspec' 17 | gem 'rspec-parameterized' 18 | gem 'rubocop', require: false 19 | gem 'simplecov', require: false 20 | gem 'unparser', '~> 0.5.5' # support ruby 2.5 21 | gem 'webmock' 22 | end 23 | -------------------------------------------------------------------------------- /examples/spot/loan/adjust_flexible_loan_ltv.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | key = '' 12 | secret = '' 13 | 14 | client = Binance::Spot.new(key: key, secret: secret) 15 | logger.info(client.adjust_flexible_loan_ltv(loanCoin: 'BUSD', collateralCoin: 'BNB', adjustmentAmount: 1.0, direction: 'ADDITIONAL')) 16 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_margin_transfer.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | params = { 13 | email: 'alice@test.com', 14 | asset: 'BNB', 15 | amount: 1, 16 | type: 1 17 | } 18 | logger.info(client.sub_account_margin_transfer(**params)) 19 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_borrow_repay.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | logger.info(client.margin_borrow_repay(asset: 'BNB', isIsolated: 'TRUE', symbol: 'BNBUSDT', amount: '1.0', type: 'BORROW')) 15 | -------------------------------------------------------------------------------- /examples/spot/subaccount/sub_account_futures_transfer.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | params = { 13 | email: 'alice@test.com', 14 | asset: 'BNB', 15 | amount: 1, 16 | type: 1 17 | } 18 | logger.info(client.sub_account_futures_transfer(**params)) 19 | -------------------------------------------------------------------------------- /examples/spot/market/exchange_info.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(base_url: 'https://testnet.binance.vision') 12 | logger.info(client.exchange_info(symbols: %w[BTCUSDT])) 13 | logger.info(client.exchange_info(symbol: 'BTCUSDT')) 14 | logger.info(client.exchange_info(permissions: 'SPOT')) 15 | -------------------------------------------------------------------------------- /spec/binance/spot/market/ping_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Market, '#ping' do 6 | let(:path) { '/api/v3/ping' } 7 | let(:body) { {}.to_json } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return empty body' do 15 | spot_client.ping 16 | expect(send_a_request(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/margin/get_isolated_margin_tier.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | # client = Binance::Spot.new(key: '', secret: '') 14 | client = Binance::Spot.new(key: '', secret: '') 15 | 16 | logger.info(client.get_isolated_margin_tier(symbol: 'BTCUSDT', tier: 2)) 17 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_cancel_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | params = { 15 | symbol: 'BNBUSDT', 16 | orderId: '554522951', 17 | recvWindow: 5_000 18 | } 19 | logger.info(client.margin_cancel_order(**params)) 20 | -------------------------------------------------------------------------------- /spec/binance/spot/market/time_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Market, '#time' do 6 | let(:path) { '/api/v3/time' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return time' do 15 | spot_client.time 16 | expect(send_a_request(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_resale_cancel.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_resale_request( 15 | configId: '', 16 | userName: '' 17 | )) 18 | -------------------------------------------------------------------------------- /examples/spot/convert/convert_limit_place_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | logger.info(client.convert_limit_place_order(baseAsset: 'BNB', quoteAsset: 'USDT', limitPrice: 590.0, side: 'BUY', expiredType: '1_D', baseAmount: 1.0)) 16 | -------------------------------------------------------------------------------- /examples/spot/trade/order_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.order_list(orderListId: '11')) 19 | -------------------------------------------------------------------------------- /lib/binance/utils/faraday/middleware/rsa_signature.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'openssl' 4 | require 'base64' 5 | 6 | module Binance 7 | module Utils 8 | module Faraday 9 | module Middleware 10 | RSASignature = Struct.new(:app, :auth) do 11 | def call(env) 12 | env.url.query = Url.add_param(env.url.query, 'signature', auth.rsa_sign(env.url.query)) 13 | app.call env 14 | end 15 | end 16 | end 17 | end 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /lib/binance/utils/faraday/middleware/timestamp.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'date' 4 | 5 | module Binance 6 | module Utils 7 | module Faraday 8 | module Middleware 9 | Timestamp = Struct.new(:app) do 10 | def call(env) 11 | env.url.query = Url.add_param( 12 | env.url.query, 'timestamp', DateTime.now.strftime('%Q') 13 | ) 14 | app.call env 15 | end 16 | end 17 | end 18 | end 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /examples/spot/trade/get_order_rate_limit.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | # key = '' 15 | # secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.get_order_rate_limit) 19 | -------------------------------------------------------------------------------- /examples/spot/wallet/withdraw.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', secret: '') 12 | param = { 13 | coin: 'BNB', 14 | address: '', 15 | amount: 0.1, 16 | withdrawOrderId: 'withdraw_order_id', 17 | network: 'BNB', 18 | addressTag: 'myaddress', 19 | name: 'address_name' 20 | } 21 | logger.info(client.withdraw(param)) 22 | -------------------------------------------------------------------------------- /lib/binance/utils/faraday/middleware/hmac_signature.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'openssl' 4 | require 'base64' 5 | 6 | module Binance 7 | module Utils 8 | module Faraday 9 | module Middleware 10 | HMACSignature = Struct.new(:app, :auth) do 11 | def call(env) 12 | env.url.query = Url.add_param(env.url.query, 'signature', auth.hmac_sign(env.url.query)) 13 | app.call env 14 | end 15 | end 16 | end 17 | end 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/system_status_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#system_status' do 6 | let(:path) { '/sapi/v1/system/status' } 7 | let(:body) { {}.to_json } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return empty body' do 15 | spot_client.system_status 16 | expect(send_a_request(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/trade/commission_rate.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.commission_rate(symbol: 'BNBUSDT')) 19 | -------------------------------------------------------------------------------- /examples/spot/trade/my_allocations.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.my_allocations(symbol: 'BNBUSDT')) 19 | -------------------------------------------------------------------------------- /examples/spot/trade/cancel_open_orders.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.cancel_open_orders(symbol: 'BTCUSDT')) 19 | -------------------------------------------------------------------------------- /examples/spot/trade/cancel_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.cancel_order(symbol: 'BNBUSDT', orderId: 25)) 19 | -------------------------------------------------------------------------------- /examples/spot/trade/my_prevented_matches.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.my_prevented_matches(symbol: 'BNBUSDT')) 19 | -------------------------------------------------------------------------------- /examples/spot/trade/open_order_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | # get all open oco orders 19 | logger.info(client.open_order_list) 20 | -------------------------------------------------------------------------------- /examples/spot/trade/cancel_order_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.cancel_order_list(symbol: 'BTCUSDT', orderListId: 11)) 19 | -------------------------------------------------------------------------------- /spec/binance/spot/mining/mining_algo_list_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Mining, '#mining_algo_list' do 6 | let(:path) { '/sapi/v1/mining/pub/algoList' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return algo list' do 15 | spot_client_signed.mining_algo_list 16 | expect(send_a_request(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/mining/mining_coin_list_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Mining, '#mining_coin_list' do 6 | let(:path) { '/sapi/v1/mining/pub/coinList' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return coin list' do 15 | spot_client_signed.mining_coin_list 16 | expect(send_a_request(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/account_info.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#account_info' do 6 | let(:path) { '/sapi/v1/account/info' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return account info detail' do 15 | spot_client_signed.account_info 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_new_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '') 14 | params = { 15 | symbol: 'BNBUSDT', 16 | side: 'SELL', 17 | type: 'LIMIT', 18 | quantity: 1, 19 | price: '30', 20 | timeInForce: 'GTC', 21 | recvWindow: 5_000 22 | } 23 | logger.info(client.margin_new_order(**params)) 24 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/wallet_balance.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#wallet_balance' do 6 | let(:path) { '/sapi/v1/asset/wallet/balance' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return user wallet balance' do 15 | spot_client_signed.wallet_balance 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_loan_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_loan_history' do 6 | let(:path) { '/sapi/v1/loan/income' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should accept the offered quote by quote ID' do 15 | spot_client_signed.get_loan_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/market/agg_trades.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 12 | logger.info(client.agg_trades(symbol: 'BTCUSDT')) 13 | 14 | # with limit 15 | logger.info(client.agg_trades(symbol: 'BTCUSDT', limit: 100)) 16 | 17 | # with start and end time 18 | logger.info(client.agg_trades(symbol: 'BTCUSDT', limit: 100, startTime: '', endTime: '')) 19 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/delist_schedule.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#delist_schedule' do 6 | let(:path) { '/sapi/v1/spot/delist-schedule' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return symbols delist schedule for spot' do 15 | spot_client_signed.delist_schedule 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/convert/convert_order_status.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#convert_order_status' do 6 | let(:path) { '/sapi/v1/convert/orderStatus' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should retrieve convert trade history' do 15 | spot_client_signed.convert_order_status 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/margin/margin_oco_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key here 12 | # or BINANCE_PUBLIC_API_KEY in env 13 | client = Binance::Spot.new(key: '', secret: '') 14 | 15 | params = { 16 | symbol: 'BNBUSDT', 17 | side: 'BUY', 18 | quantity: 0.1, 19 | price: 410, 20 | stopPrice: 400, 21 | stopLimitPrice: 400.1, 22 | stopLimitTimeInForce: 'GTC' 23 | } 24 | 25 | logger.info(client.margin_oco_order(**params)) 26 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_loan_borrow_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_loan_borrow_history' do 6 | let(:path) { '/sapi/v1/loan/borrow/history' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return loan borrow history' do 15 | spot_client_signed.get_loan_borrow_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/trade/open_orders.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | # without symbol 19 | logger.info(client.open_orders) 20 | 21 | # with symbol 22 | logger.info(client.open_orders(symbol: 'BNBUSDT')) 23 | -------------------------------------------------------------------------------- /spec/binance/spot/convert/convert_asset_info.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#convert_asset_info' do 6 | let(:path) { '/sapi/v1/convert/assetInfo' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return supported assets precision information' do 15 | spot_client_signed.convert_asset_info 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/stream/new_margin_listen_key_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#new_margin_listen_key' do 6 | let(:path) { '/sapi/v1/userDataStream' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | stub_binance_request(:post, path, status, body) 13 | end 14 | 15 | it 'should create a new margin listen key' do 16 | spot_client_signed.new_margin_listen_key 17 | expect(send_a_request(:post, path)).to have_been_made 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_list.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#sub_account_list' do 6 | let(:path) { '/sapi/v1/managed-subaccount/info' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return investors managed sub-account list' do 15 | spot_client_signed.sub_account_list 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_loan_repayment_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_loan_repayment_history' do 6 | let(:path) { '/sapi/v1/loan/repay/history' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return loan repayment history' do 15 | spot_client_signed.get_loan_repayment_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/trade/all_orders.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.all_orders(symbol: 'BTCUSDT')) 19 | 20 | # with more parameters 21 | logger.info(client.all_orders(symbol: 'BTCUSDT', limit: 2)) 22 | -------------------------------------------------------------------------------- /examples/spot/trade/my_trades.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.my_trades(symbol: 'BTCUSDT')) 19 | 20 | # with more parameters 21 | logger.info(client.my_trades(symbol: 'BTCUSDT', limit: 2)) 22 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/user_delegation_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#user_delegation_history' do 6 | let(:path) { '/sapi/v1/asset/custody/transfer-history' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return user delegation History' do 15 | spot_client_signed.user_delegation_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/stream/new_listen_key_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#new_listen_key' do 6 | let(:path) { '/api/v3/userDataStream' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | # mocking_signature_and_ts(**params) 13 | stub_binance_request(:post, path, status, body) 14 | end 15 | 16 | it 'should create a new listen key' do 17 | spot_client_signed.new_listen_key 18 | expect(send_a_request(:post, path)).to have_been_made 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /examples/spot/mining/mining_resale_request.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | client = Binance::Spot.new(key: '') 14 | logger.info(client.mining_resale_request( 15 | userName: '', 16 | algo: '', 17 | startDate: '', 18 | endDate: '', 19 | toPoolUser: '', 20 | hashRate: '' 21 | )) 22 | -------------------------------------------------------------------------------- /examples/spot/trade/all_order_list.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | # get all oco orders 19 | logger.info(client.all_order_list) 20 | 21 | # with more parameters 22 | logger.info(client.all_order_list(limit: 2, fromId: '111')) 23 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_all_pairs_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_all_pairs' do 6 | let(:path) { '/sapi/v1/margin/allPairs ' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_request(:get, path, status, body) 14 | end 15 | 16 | it 'should return margin all pairs' do 17 | spot_client_signed.margin_all_pairs 18 | expect(send_a_request(:get, path)).to have_been_made 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_all_assets_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_all_assets' do 6 | let(:path) { '/sapi/v1/margin/allAssets ' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_request(:get, path, status, body) 14 | end 15 | 16 | it 'should return margin all assets' do 17 | spot_client_signed.margin_all_assets 18 | expect(send_a_request(:get, path)).to have_been_made 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/get_assets_converted_into_bnb.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_assets_converted_into_bnb' do 6 | let(:path) { '/sapi/v1/asset/dust-btc' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:post, path, status, body) 12 | end 13 | 14 | it 'should return assets that can be converted into BNB' do 15 | spot_client_signed.get_assets_converted_into_bnb 16 | expect(send_a_request_with_signature(:post, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TAMPLATE.md: -------------------------------------------------------------------------------- 1 | Before submitting a new issue, please check if a similar issue has already been filed. 2 | 3 | ### Issue subject 4 | Briefly describe the issue here. 5 | 6 | 7 | ### Expected behaviour 8 | Describe what should happen. 9 | 10 | 11 | ### Actual behaviour 12 | Describe what happens instead. Please include the complete failure message. 13 | 14 | 15 | ### Steps to reproduce 16 | Provide steps to let us know how we can reproduce this issue. 17 | 18 | 19 | ### Environment 20 | Provide any relevant information about your setup, such as: 21 | * Version of binance-connector-ruby 22 | * Ruby version 23 | * Operating system 24 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_loan_ltv_adjustment_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_loan_ltv_adjustment_history' do 6 | let(:path) { '/sapi/v1/loan/ltv/adjustment/history' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return loan LTV adjustment history' do 15 | spot_client_signed.get_loan_ltv_adjustment_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_leverage_bracket.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#margin_leverage_bracket' do 6 | let(:path) { '/sapi/v1/margin/leverageBracket' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return liability coin leverage bracket in Cross Margin Pro Mode' do 15 | spot_client_signed.margin_leverage_bracket 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/coin_info_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#coin_info' do 6 | let(:path) { '/sapi/v1/capital/config/getall ' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return account info' do 17 | spot_client_signed.coin_info 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /examples/spot/market/historical_trades.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # historical trades endpoint require api key, no signature required 12 | # set key and secret here 13 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 14 | client = Binance::Spot.new(key: '', base_url: 'https://testnet.binance.vision') 15 | logger.info(client.historical_trades(symbol: 'BTCUSDT')) 16 | 17 | # with limit 18 | logger.info(client.historical_trades(symbol: 'BTCUSDT', limit: 100)) 19 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_flexible_loan_borrow_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_flexible_loan_borrow_history' do 6 | let(:path) { '/sapi/v2/loan/flexible/borrow/history' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return flexible loan borrow history' do 15 | spot_client_signed.get_flexible_loan_borrow_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_flexible_loan_ongoing_orders.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_flexible_loan_ongoing_orders' do 6 | let(:path) { '/sapi/v2/loan/flexible/ongoing/orders' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return flexible loan ongoing orders' do 15 | spot_client_signed.get_flexible_loan_ongoing_orders 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/one_click_arrival_deposit_apply.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#one_click_arrival_deposit_apply' do 6 | let(:path) { '/sapi/v1/capital/deposit/credit-apply' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:post, path, status, body) 12 | end 13 | 14 | it 'should apply deposit credit for expired address' do 15 | spot_client_signed.one_click_arrival_deposit_apply 16 | expect(send_a_request_with_signature(:post, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /lib/binance/utils/url.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Binance 4 | module Utils 5 | # Url Utils 6 | module Url 7 | module_function 8 | 9 | def build_query(params) 10 | params.map do |key, value| 11 | if value.is_a?(Array) 12 | value.map { |v| "#{key}=#{v}" }.join('&') 13 | else 14 | "#{key}=#{value}" 15 | end 16 | end.join('&') 17 | end 18 | 19 | def add_param(query, key, value) 20 | query = (query || '').dup 21 | query << "&#{key}=#{value}" 22 | query.delete_prefix('&') 23 | end 24 | end 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /spec/binance/spot/convert/convert_limit_query_open_orders.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#convert_limit_query_open_orders' do 6 | let(:path) { '/sapi/v1/convert/limit/queryOpenOrders' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:post, path, status, body) 12 | end 13 | 14 | it 'should return a quote for the requested token pairs' do 15 | spot_client_signed.convert_limit_query_open_orders 16 | expect(send_a_request_with_signature(:post, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_flexible_loan_repayment_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_flexible_loan_repayment_history' do 6 | let(:path) { '/sapi/v2/loan/flexible/repay/history' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return flexible loan repayment history' do 15 | spot_client_signed.get_flexible_loan_repayment_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/trade/get_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | logger.info(client.get_order(symbol: 'BTCUSDT', orderId: '25')) 19 | 20 | # with more parameters 21 | logger.info(client.get_order(symbol: 'BTCUSDT', origClientOrderId: 'NAIqXhXeObys1cjXBSTceD')) 22 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_flexible_loan_assets_data.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_flexible_loan_assets_data' do 6 | let(:path) { '/sapi/v2/loan/flexible/loanable/data' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return interest rate and borrow limit of flexible loanable assets' do 15 | spot_client_signed.get_flexible_loan_assets_data 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/convert/convert_exchange_info.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#convert_exchange_info' do 6 | let(:path) { '/sapi/v1/convert/exchangeInfo' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body, params) 12 | end 13 | 14 | it 'should return all convertible token pairs and the tokens respective upper/lower limits' do 15 | spot_client_signed.convert_exchange_info(**params) 16 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_flexible_loan_ltv_adjustment_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_flexible_loan_ltv_adjustment_history' do 6 | let(:path) { '/sapi/v2/loan/flexible/ltv/adjustment/history' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return flexible Loan LTV Adjustment History' do 15 | spot_client_signed.get_flexible_loan_ltv_adjustment_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/enable_fast_withdraw_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#enable_fast_withdraw' do 6 | let(:path) { '/sapi/v1/account/enableFastWithdrawSwitch' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:post, path, status, body, params) 14 | end 15 | 16 | it 'should enable fast withdraw' do 17 | spot_client_signed.enable_fast_withdraw 18 | expect(send_a_request_with_signature(:post, path)).to have_been_made 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /spec/binance/spot/loan/get_flexible_loan_collateral_data.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#get_flexible_loan_collateral_data' do 6 | let(:path) { '/sapi/v2/loan/flexible/collateral/data' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return LTV information and collateral limit of flexible loans collateral assets' do 15 | spot_client_signed.get_flexible_loan_collateral_data 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/disable_fast_withdraw_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#disable_fast_withdraw' do 6 | let(:path) { '/sapi/v1/account/disableFastWithdrawSwitch' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:post, path, status, body, params) 14 | end 15 | 16 | it 'should disable fast withdraw' do 17 | spot_client_signed.disable_fast_withdraw 18 | expect(send_a_request_with_signature(:post, path)).to have_been_made 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/cloud_mining_payment_and_refund_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Convert, '#cloud_mining_payment_and_refund_history' do 6 | let(:path) { '/sapi/v1/asset/ledger-transfer/cloud-mining/queryByPage' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_sign_request(:get, path, status, body) 12 | end 13 | 14 | it 'should return Cloud-Mining payment and refund history' do 15 | spot_client_signed.cloud_mining_payment_and_refund_history 16 | expect(send_a_request_with_signature(:get, path)).to have_been_made 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /examples/spot/trade/new_oco_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | params = { 19 | symbol: 'BNBUSDT', 20 | side: 'SELL', 21 | quantity: 1, 22 | aboveType: 'LIMIT_MAKER', 23 | belowType: 'LIMIT_MAKER', 24 | abovePrice: 600, 25 | belowPrice: 590 26 | } 27 | 28 | logger.info(client.new_oco_order(params)) 29 | -------------------------------------------------------------------------------- /.github/workflows/ruby.yml: -------------------------------------------------------------------------------- 1 | name: Ruby 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | - rc-** 11 | 12 | jobs: 13 | build: 14 | strategy: 15 | fail-fast: false 16 | matrix: 17 | ruby: ['3.0', '3.1', '3.2', '3.3'] 18 | 19 | runs-on: ubuntu-latest 20 | 21 | steps: 22 | - uses: actions/checkout@v3 23 | - name: Set up Ruby ${{ matrix.ruby }} 24 | uses: ruby/setup-ruby@v1 25 | with: 26 | ruby-version: ${{ matrix.ruby }} 27 | - name: Build and rspec test 28 | run: | 29 | gem install bundler 30 | bundle install --jobs 4 --retry 3 31 | rubocop 32 | bundle exec rspec 33 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_status_sepc.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#sub_account_status' do 6 | let(:path) { '/sapi/v1/sub-account/status' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) do 10 | { 11 | email: 'alice@test.com' 12 | } 13 | end 14 | 15 | before do 16 | mocking_signature_and_ts(**params) 17 | stub_binance_sign_request(:get, path, status, body, params) 18 | end 19 | 20 | it 'should return status' do 21 | spot_client_signed.sub_account_status(**params) 22 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /spec/binance/spot/stream/renew_listen_key_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#renew_listen_key' do 6 | let(:path) { '/api/v3/userDataStream' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:listenKey) { 'listen_key' } 10 | let(:params) { {} } 11 | 12 | before do 13 | stub_binance_request(:put, path, status, body) 14 | end 15 | 16 | context 'with param' do 17 | let(:path) { "/api/v3/userDataStream?listenKey=#{listenKey}" } 18 | it 'should renew a listen key' do 19 | spot_client_signed.renew_listen_key(listenKey) 20 | expect(send_a_request(:put, path)).to have_been_made 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /examples/websocket/spot/trade.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | client.trade(symbol: 'btcusdt', callbacks: callbacks) 28 | end 29 | -------------------------------------------------------------------------------- /spec/binance/spot/stream/delete_listen_key_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#delete_listen_key' do 6 | let(:path) { '/api/v3/userDataStream' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:listenKey) { 'listen_key' } 10 | let(:params) { {} } 11 | 12 | before do 13 | stub_binance_request(:delete, path, status, body) 14 | end 15 | 16 | context 'with param' do 17 | let(:path) { "/api/v3/userDataStream?listenKey=#{listenKey}" } 18 | it 'should delete a listen key' do 19 | spot_client_signed.delete_listen_key(listenKey) 20 | expect(send_a_request(:delete, path)).to have_been_made 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_margin_account_summary_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#sub_account_margin_account_summary' do 6 | let(:path) { '/sapi/v1/sub-account/margin/accountSummary' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return margin account summary' do 17 | spot_client_signed.sub_account_margin_account_summary(**params) 18 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /examples/websocket/spot/agg_trade.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | client.agg_trade(symbol: 'btcusdt', callbacks: callbacks) 28 | end 29 | -------------------------------------------------------------------------------- /examples/spot/trade/new_order.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | params = { 19 | price: '20', 20 | side: 'BUY', 21 | symbol: 'BNBUSDT', 22 | timeInForce: 'GTC', 23 | type: 'LIMIT', 24 | quantity: 1, 25 | newClientOrderId: 'my_order_1', 26 | newOrderRespType: 'RESULT', 27 | recvWindow: 2_000 28 | } 29 | 30 | logger.info(client.new_order(**params)) 31 | -------------------------------------------------------------------------------- /examples/websocket/spot/kline.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | client.kline(symbol: 'btcusdt', interval: '30m', callbacks: callbacks) 28 | end 29 | -------------------------------------------------------------------------------- /spec/binance/spot/stream/delete_margin_listen_key_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#delete_margin_listen_key' do 6 | let(:path) { '/sapi/v1/userDataStream' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:listenKey) { 'listen_key' } 10 | let(:params) { {} } 11 | 12 | before do 13 | stub_binance_request(:delete, path, status, body) 14 | end 15 | 16 | context 'with param' do 17 | let(:path) { "/sapi/v1/userDataStream?listenKey=#{listenKey}" } 18 | it 'should delete a listen key' do 19 | spot_client_signed.delete_margin_listen_key(listenKey) 20 | expect(send_a_request(:delete, path)).to have_been_made 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /spec/binance/spot/stream/renew_margin_listen_key_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#renew_margin_listen_key' do 6 | let(:path) { '/api/v3/userDataStream' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:listenKey) { 'listen_key' } 10 | let(:params) { {} } 11 | 12 | before do 13 | stub_binance_request(:put, path, status, body) 14 | end 15 | 16 | context 'with param' do 17 | let(:path) { "/sapi/v1/userDataStream?listenKey=#{listenKey}" } 18 | it 'should renew a margin listen key' do 19 | spot_client_signed.renew_margin_listen_key(listenKey) 20 | expect(send_a_request(:put, path)).to have_been_made 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /examples/websocket/spot/diff_book_depth.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | client.diff_book_depth(symbol: 'btcusdt', speed: '100ms', callbacks: callbacks) 28 | end 29 | -------------------------------------------------------------------------------- /lib/binance/utils/validation.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Binance 4 | module Utils 5 | # Client side validation 6 | class Validation 7 | class << self 8 | def require_param(param_name, param_value) 9 | raise Binance::RequiredParameterError.new(param_name, param_value) if invalid?(param_value) 10 | end 11 | 12 | def invalid?(param_value) 13 | param_value.nil? || 14 | (array_or_hash?(param_value) && param_value.empty?) || 15 | (param_value.respond_to?(:to_str) && param_value.empty?) 16 | end 17 | 18 | private 19 | 20 | def array_or_hash?(param_value) 21 | param_value.is_a?(Array) || param_value.is_a?(Hash) 22 | end 23 | end 24 | end 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /spec/binance/spot/market/avg_price_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Market, '#avgPrice' do 6 | let(:symbol) { 'BNBUSDT' } 7 | let(:path) { "/api/v3/avgPrice?symbol=#{symbol}" } 8 | let(:body) { fixture('response.json') } 9 | let(:status) { 200 } 10 | 11 | before do 12 | stub_binance_request(:get, path, status, body) 13 | end 14 | 15 | context 'validation' do 16 | it 'should raise validation error without symbol' do 17 | expect { spot_client.avg_price(symbol: '') }.to raise_error(Binance::RequiredParameterError) 18 | end 19 | end 20 | 21 | it 'should return avg price' do 22 | spot_client.avg_price(symbol: symbol) 23 | expect(send_a_request(:get, path)).to have_been_made 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /examples/websocket/spot/partial_book_depth.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | client.partial_book_depth(symbol: 'btcusdt', levels: 5, speed: '100ms', callbacks: callbacks) 28 | end 29 | -------------------------------------------------------------------------------- /examples/websocket/spot/rolling_window_ticker.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | client.rolling_window_ticker(symbol: 'btcusdt', windowSize: '1h', callbacks: callbacks) 28 | end 29 | -------------------------------------------------------------------------------- /examples/websocket/spot/rolling_window_ticker_all_symbols.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | client.rolling_window_ticker_all_symbols(windowSize: '1h', callbacks: callbacks) 28 | end 29 | -------------------------------------------------------------------------------- /examples/spot/trade/cancel_replace.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | params = { 19 | symbol: 'BNBUSDT', 20 | side: 'BUY', 21 | type: 'LIMIT', 22 | cancelReplaceMode: 'STOP_ON_FAILURE', 23 | timeInForce: 'GTC', 24 | quantity: 1, 25 | price: 200, 26 | cancelOrderId: 1_234_567, # this should be a real existing open order id. 27 | newOrderRespType: 'FULL' 28 | } 29 | 30 | logger.info(client.cancel_replace(**params)) 31 | -------------------------------------------------------------------------------- /examples/spot/trade/new_order_test.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require_relative '../../common' 8 | 9 | logger = Common.setup_logger 10 | 11 | # set key and secret here 12 | # or BINANCE_PUBLIC_API_KEY and BINANCE_PRIVATE_SECRET in env 13 | 14 | key = '' 15 | secret = '' 16 | client = Binance::Spot.new(key: key, secret: secret, base_url: 'https://testnet.binance.vision') 17 | 18 | params = { 19 | price: '20', 20 | side: 'BUY', 21 | symbol: 'BNBUSDT', 22 | timeInForce: 'GTC', 23 | type: 'LIMIT', 24 | quantity: 1, 25 | newClientOrderId: 'my_order_1', 26 | newOrderRespType: 'RESULT', 27 | recvWindow: 2_000 28 | } 29 | 30 | # if the request is not valid, will return error 31 | logger.info(client.new_order_test(**params)) 32 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_open_orders_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_open_orders' do 6 | let(:path) { '/sapi/v1/margin/openOrders' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'with parameters' do 16 | let(:params) do 17 | { 18 | symbol: 'BNB', 19 | recvWindow: 1_000 20 | } 21 | end 22 | it 'should query margin open orders' do 23 | spot_client_signed.margin_open_orders(**params) 24 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 25 | end 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_transfer_history_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_transfer_history' do 6 | let(:path) { '/sapi/v1/margin/transfer' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:asset) { 'BNB' } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | context 'with parameters' do 17 | let(:params) do 18 | { asset: asset, type: 'ROLL_IN' } 19 | end 20 | it 'should query transfer history' do 21 | spot_client_signed.margin_transfer_history(**params) 22 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 23 | end 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Publish Gem 2 | 3 | on: 4 | release: 5 | types: 6 | - published 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v3 13 | - name: Set up Ruby 3.1 14 | uses: ruby/setup-ruby@v1 15 | with: 16 | ruby-version: 3.1.0 17 | 18 | - name: Release Gem 19 | run: | 20 | mkdir -p $HOME/.gem 21 | touch $HOME/.gem/credentials 22 | chmod 0600 $HOME/.gem/credentials 23 | printf -- "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}\n" > $HOME/.gem/credentials 24 | gem build binance-connector-ruby.gemspec 25 | gem push *.gem 26 | env: 27 | RUBYGEMS_VERSION: "${{github.event.inputs.version}}" 28 | RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}} -------------------------------------------------------------------------------- /spec/binance/spot/mining/mining_resale_list_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Mining, '#mining_resale_list' do 6 | let(:path) { '/sapi/v1/mining/hash-transfer/config/details/list' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:pageIndex) { 1 } 10 | let(:pageSize) { 100 } 11 | let(:params) do 12 | { 13 | pageIndex: pageIndex, 14 | pageSize: pageSize 15 | } 16 | end 17 | 18 | before do 19 | mocking_signature_and_ts(**params) 20 | stub_binance_sign_request(:get, path, status, body, params) 21 | end 22 | 23 | it 'should return hashrate resale list' do 24 | spot_client_signed.mining_resale_list(**params) 25 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/get_user_asset_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#get_user_asset' do 6 | let(:path) { '/sapi/v3/asset/getUserAsset' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:post, path, status, body, params) 14 | end 15 | 16 | context 'with parameters' do 17 | let(:params) do 18 | { 19 | asset: 'BNB', 20 | needBtcValuation: true 21 | } 22 | end 23 | it 'should return user\'s asset list ' do 24 | spot_client_signed.get_user_asset(**params) 25 | expect(send_a_request_with_signature(:post, path, params)).to have_been_made 26 | end 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /examples/websocket/spot/user_data.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | # on spot testnet 13 | client = Binance::Spot::WebSocket.new(base_url: 'wss://stream.testnet.binance.vision') 14 | 15 | EM.run do 16 | onopen = proc { logger.info('connected to server') } 17 | onmessage = proc { |msg, _type| logger.info(msg) } 18 | onerror = proc { |e| logger.error(e) } 19 | onclose = proc { logger.info('connection closed') } 20 | 21 | callbacks = { 22 | onopen: onopen, 23 | onmessage: onmessage, 24 | onerror: onerror, 25 | onclose: onclose 26 | } 27 | 28 | # with listen key 29 | client.user_data(stream: '', callbacks: callbacks) 30 | end 31 | -------------------------------------------------------------------------------- /examples/websocket/spot/book_ticker.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | # book ticker for single symbol 28 | client.book_ticker(symbol: 'btcusdt', callbacks: callbacks) 29 | 30 | # book ticker for all symbols 31 | client.book_ticker(callbacks: callbacks) 32 | end 33 | -------------------------------------------------------------------------------- /examples/websocket/spot/mini_ticker.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | # mini ticker for single symbol 28 | client.mini_ticker(symbol: 'btcusdt', callbacks: callbacks) 29 | 30 | # mini ticker for all symbols 31 | client.mini_ticker(callbacks: callbacks) 32 | end 33 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/dust_log_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#dust_log' do 6 | let(:path) { '/sapi/v1/asset/dribblet' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return log' do 17 | spot_client_signed.dust_log 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return log' do 25 | spot_client_signed.dust_log(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /examples/websocket/spot/symbol_ticker.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | # symbol ticker for single symbol 28 | client.symbol_ticker(symbol: 'btcusdt', callbacks: callbacks) 29 | 30 | # symbol ticker for all symbols 31 | client.symbol_ticker(callbacks: callbacks) 32 | end 33 | -------------------------------------------------------------------------------- /spec/binance/spot/trade/account_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#account' do 6 | let(:path) { '/api/v3/account' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return account info' do 17 | spot_client_signed.account 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should specific recvWindow' do 25 | spot_client_signed.account(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/asset_devidend_record_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#asset_devidend_record' do 6 | let(:path) { '/sapi/v1/asset/assetDividend' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'with parameters' do 16 | let(:params) do 17 | { 18 | asset: 'BNB', 19 | startTime: '1591673273650', 20 | endTime: '1591673273650', 21 | limit: 1 22 | } 23 | end 24 | it 'should get asset dividend record' do 25 | spot_client_signed.asset_devidend_record(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/market/ticker_24hr_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Market, '#ticker_24hr' do 6 | let(:symbol) { 'BNBUSDT' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_request(:get, path, status, body) 12 | end 13 | 14 | context 'with symbol' do 15 | let(:path) { "/api/v3/ticker/24hr?symbol=#{symbol}" } 16 | it 'should return one symbol 24hr ticker' do 17 | spot_client.ticker_24hr(symbol: symbol) 18 | expect(send_a_request(:get, path)).to have_been_made 19 | end 20 | end 21 | 22 | context 'without symbol' do 23 | let(:path) { '/api/v3/ticker/24hr' } 24 | it 'should return all pairs 24hr ticker' do 25 | spot_client.ticker_24hr 26 | expect(send_a_request(:get, path)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/market/ticker_price_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Market, '#ticker_price' do 6 | let(:symbol) { 'BNBUSDT' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_request(:get, path, status, body) 12 | end 13 | 14 | context 'with symbol' do 15 | let(:path) { "/api/v3/ticker/price?symbol=#{symbol}" } 16 | it 'should return one ticker price' do 17 | spot_client.ticker_price(symbol: symbol) 18 | expect(send_a_request(:get, path)).to have_been_made 19 | end 20 | end 21 | 22 | context 'without symbol' do 23 | let(:path) { '/api/v3/ticker/price' } 24 | it 'should return all symbols ticker price' do 25 | spot_client.ticker_price 26 | expect(send_a_request(:get, path)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/trade_fee_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#trade_fee' do 6 | let(:path) { '/sapi/v1/asset/tradeFee' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return trade fee' do 17 | spot_client_signed.trade_fee 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return trade fee' do 25 | spot_client_signed.trade_fee(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/market/book_ticker_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Market, '#book_ticker' do 6 | let(:symbol) { 'BNBUSDT' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | stub_binance_request(:get, path, status, body) 12 | end 13 | 14 | context 'with symbol' do 15 | let(:path) { "/api/v3/ticker/bookTicker?symbol=#{symbol}" } 16 | it 'should return one symbol book ticker' do 17 | spot_client.book_ticker(symbol: symbol) 18 | expect(send_a_request(:get, path)).to have_been_made 19 | end 20 | end 21 | 22 | context 'without symbol' do 23 | let(:path) { '/api/v3/ticker/bookTicker' } 24 | it 'should return all pairs book ticker' do 25 | spot_client.book_ticker 26 | expect(send_a_request(:get, path)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_interest_history.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_interest_history' do 6 | let(:path) { '/sapi/v1/margin/interestHistory' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'with parameters' do 16 | let(:params) do 17 | { 18 | asset: 'BNB', 19 | startTime: '1581783387615', 20 | endTime: '1581783387616', 21 | current: 2, 22 | size: 100 23 | } 24 | end 25 | it 'should query load record' do 26 | spot_client_signed.margin_interest_history(**params) 27 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /examples/websocket/spot/subscribe.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | $LOAD_PATH.unshift('./lib') 5 | 6 | require 'binance' 7 | require 'eventmachine' 8 | require_relative '../../common' 9 | 10 | logger = Common.setup_logger 11 | 12 | client = Binance::Spot::WebSocket.new 13 | 14 | EM.run do 15 | onopen = proc { logger.info('connected to server') } 16 | onmessage = proc { |msg, _type| logger.info(msg) } 17 | onerror = proc { |e| logger.error(e) } 18 | onclose = proc { logger.info('connection closed') } 19 | 20 | callbacks = { 21 | onopen: onopen, 22 | onmessage: onmessage, 23 | onerror: onerror, 24 | onclose: onclose 25 | } 26 | 27 | # subscribe single stream 28 | client.subscribe(stream: 'btcusdt@bookTicker', callbacks: callbacks) 29 | 30 | # combined subscribing 31 | client.subscribe(stream: ['btcusdt@bookTicker', 'btcusdt@miniTicker'], callbacks: callbacks) 32 | end 33 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/asset_detail_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#asset_detail' do 6 | let(:path) { '/sapi/v1/asset/assetDetail' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return asset details' do 17 | spot_client_signed.asset_detail 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return asset details' do 25 | spot_client_signed.asset_detail(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/account_status_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#account_status' do 6 | let(:path) { '/sapi/v1/account/status' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return account status' do 17 | spot_client_signed.account_status 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return account status' do 25 | spot_client_signed.account_status(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_account_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_account' do 6 | let(:path) { '/sapi/v1/margin/account' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return margin account info' do 17 | spot_client_signed.margin_account 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should specific recvWindow' do 25 | spot_client_signed.margin_account(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_force_liquidation_record_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_force_liquidation_record' do 6 | let(:path) { '/sapi/v1/margin/forceLiquidationRec' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'with parameters' do 16 | let(:params) do 17 | { 18 | startTime: '1581783387615', 19 | endTime: '1581783387616', 20 | current: 2, 21 | size: 100 22 | } 23 | end 24 | it 'should query force liquidation record' do 25 | spot_client_signed.margin_force_liquidation_record(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/trade/open_orders_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#open_orders' do 6 | let(:path) { '/api/v3/openOrders' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return all open orders' do 17 | spot_client_signed.open_orders 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000, symbol: 'BNBUSDT' } } 23 | 24 | it 'should return open orders by symbol' do 25 | spot_client_signed.open_orders(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /lib/binance/authentication.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'openssl' 4 | require 'base64' 5 | 6 | module Binance 7 | # Authentication response to API key and signature 8 | class Authentication 9 | attr_accessor :key, :secret, :private_key, :private_key_pass_phrase 10 | 11 | def initialize(key, secret, private_key = nil, private_key_pass_phrase = nil) 12 | @key = key 13 | @secret = secret 14 | @private_key = private_key 15 | @private_key_pass_phrase = private_key_pass_phrase 16 | end 17 | 18 | def provide_private_key? 19 | private_key 20 | end 21 | 22 | def hmac_sign(data) 23 | OpenSSL::HMAC.hexdigest( 24 | OpenSSL::Digest.new('sha256'), secret, data 25 | ) 26 | end 27 | 28 | def rsa_sign(data) 29 | pkey = OpenSSL::PKey::RSA.new(private_key, private_key_pass_phrase) 30 | Base64.encode64(pkey.sign('SHA256', data)) 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/funding_wallet_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#funding_wallet' do 6 | let(:path) { '/sapi/v1/asset/get-funding-asset' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:post, path, status, body, params) 14 | end 15 | 16 | it 'should return funding wallet' do 17 | spot_client_signed.funding_wallet 18 | expect(send_a_request_with_signature(:post, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return funding wallet' do 25 | spot_client_signed.funding_wallet(**params) 26 | expect(send_a_request_with_signature(:post, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/trade/get_order_rate_limit_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#get_order_rate_limit' do 6 | let(:path) { '/api/v3/rateLimit/order' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return order count usage' do 17 | spot_client_signed.get_order_rate_limit 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should specify recvWindow' do 25 | spot_client_signed.get_order_rate_limit(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /lib/binance/error.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Binance 4 | class Error < StandardError; end 5 | 6 | # Client error from 400 - 499 7 | class ClientError < Error 8 | attr_reader :response 9 | 10 | def initialize(response = nil) 11 | @response = response 12 | super(response) 13 | end 14 | end 15 | 16 | # Server side error for 5xx 17 | class ServerError < Error 18 | end 19 | 20 | # Error when missing required params 21 | class RequiredParameterError < Error 22 | def initialize(param_name, param_value) 23 | super( 24 | "ValidationFailed: #{param_name} is required, but provided value: #{param_value}" 25 | ) 26 | end 27 | end 28 | 29 | # Error when Multi parameters are not allowed to send together 30 | class DuplicatedParametersError < Error 31 | def initialize(*kwargs) 32 | super("Parameters #{kwargs} should not be sent to server together.") 33 | end 34 | end 35 | end 36 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/toggle_bnb_burn_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#toggle_bnb_burn' do 6 | let(:path) { '/sapi/v1/bnbBurn' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:post, path, status, body, params) 13 | end 14 | 15 | context 'without parameter' do 16 | let(:params) { {} } 17 | it 'should return oco' do 18 | spot_client_signed.toggle_bnb_burn 19 | expect(send_a_request_with_signature(:post, path)).to have_been_made 20 | end 21 | end 22 | 23 | context 'with symbol' do 24 | let(:params) { { recvWindow: 5_000 } } 25 | it 'should return oco' do 26 | spot_client_signed.toggle_bnb_burn(**params) 27 | expect(send_a_request_with_signature(:post, path, params)).to have_been_made 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/get_sub_account_assets_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#get_sub_account_assets' do 6 | let(:path) { '/sapi/v3/sub-account/assets' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { { email: 'alice@test.com' } } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | context 'validate email' do 17 | it 'should raise validation error without email' do 18 | expect { spot_client_signed.get_sub_account_assets(email: '') }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | it 'should return sub account assets' do 23 | spot_client_signed.get_sub_account_assets(**params) 24 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_get_oco_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_get_oco' do 6 | let(:path) { '/sapi/v1/margin/orderList' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'without parameter' do 16 | let(:params) { {} } 17 | it 'should return oco' do 18 | spot_client_signed.margin_get_oco 19 | expect(send_a_request_with_signature(:get, path)).to have_been_made 20 | end 21 | end 22 | 23 | context 'with symbol' do 24 | let(:params) { { symbol: 'BNBUSDT' } } 25 | it 'should return oco' do 26 | spot_client_signed.margin_get_oco(**params) 27 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/api_key_permission_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#api_key_permission' do 6 | let(:path) { '/sapi/v1/account/apiRestrictions' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return api key permission' do 17 | spot_client_signed.api_key_permission 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return api key permission' do 25 | spot_client_signed.api_key_permission(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/api_trading_status_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#api_trading_status' do 6 | let(:path) { '/sapi/v1/account/apiTradingStatus' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return api trading status' do 17 | spot_client_signed.api_trading_status 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return api trading status' do 25 | spot_client_signed.api_trading_status(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/get_sub_account_list_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#get_sub_account_list' do 6 | let(:path) { '/sapi/v1/sub-account/list' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return sub account list' do 17 | spot_client_signed.get_sub_account_list 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return sub account list' do 25 | spot_client_signed.get_sub_account_list(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_transfer_sub_account_history_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#sub_account_transfer_sub_account_history' do 6 | let(:path) { '/sapi/v1/sub-account/transfer/subUserHistory' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) do 10 | { 11 | asset: 'BNB', 12 | type: 1, 13 | startTime: 1_559_941_980_000, 14 | endTime: 1_559_941_980_000, 15 | limit: 100, 16 | recvWindow: 1_000 17 | } 18 | end 19 | 20 | before do 21 | mocking_signature_and_ts(**params) 22 | stub_binance_sign_request(:get, path, status, body, params) 23 | end 24 | 25 | it 'should return sub account transfer history' do 26 | spot_client_signed.sub_account_transfer_sub_account_history(**params) 27 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_asset_details_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#sub_account_asset_details' do 6 | let(:path) { '/sapi/v1/managed-subaccount/asset' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { { email: 'alice@test.com' } } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | context 'validate email' do 17 | it 'should raise validation error without email' do 18 | expect { spot_client_signed.sub_account_asset_details(email: '') }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | it 'should return sub account assets details' do 23 | spot_client_signed.sub_account_asset_details(**params) 24 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/deposit_history_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#deposit_history' do 6 | let(:path) { '/sapi/v1/capital/deposit/hisrec' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | context 'with parameters' do 17 | let(:params) do 18 | { 19 | coin: 'BNB', 20 | status: 1, 21 | startTime: '1591833599000', 22 | endTime: '1591833599000', 23 | offest: 0, 24 | limit: 30, 25 | recvWindow: 1_000 26 | } 27 | end 28 | it 'should return deposit history' do 29 | spot_client_signed.deposit_history(**params) 30 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_get_open_oco_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_get_open_oco' do 6 | let(:path) { '/sapi/v1/margin/openOrderList' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'without parameter' do 16 | let(:params) { {} } 17 | it 'should return oco' do 18 | spot_client_signed.margin_get_open_oco 19 | expect(send_a_request_with_signature(:get, path)).to have_been_made 20 | end 21 | end 22 | 23 | context 'with symbol' do 24 | let(:params) { { symbol: 'BNBUSDT' } } 25 | it 'should return oco' do 26 | spot_client_signed.margin_get_open_oco(**params) 27 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /spec/binance/spot/wallet/withdraw_history_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Wallet, '#withdraw_history' do 6 | let(:path) { '/sapi/v1/capital/withdraw/history' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | context 'with parameters' do 17 | let(:params) do 18 | { 19 | coin: 'BNB', 20 | status: 1, 21 | startTime: '1591833599000', 22 | endTime: '1591833599000', 23 | offest: 0, 24 | limit: 30, 25 | recvWindow: 1_000 26 | } 27 | end 28 | it 'should return withdraw history' do 29 | spot_client_signed.withdraw_history(**params) 30 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_get_all_oco_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_get_all_oco' do 6 | let(:path) { '/sapi/v1/margin/allOrderList' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'without params' do 16 | let(:params) { {} } 17 | it 'should return all oco' do 18 | spot_client_signed.margin_get_all_oco(**params) 19 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 20 | end 21 | end 22 | 23 | context 'with symbol' do 24 | let(:params) { { symbol: 'BNBUSDT' } } 25 | it 'should return all oco' do 26 | spot_client_signed.margin_get_all_oco(**params) 27 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_price_index_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_price_index' do 6 | let(:path) { '/sapi/v1/margin/priceIndex' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:symbol) { 'BNB' } 10 | 11 | before do 12 | stub_binance_request(:get, path, status, body) 13 | end 14 | 15 | context 'validation symbol' do 16 | let(:params) { { symbol: '' } } 17 | it 'should raise validation error without symbol' do 18 | expect { spot_client_signed.margin_price_index(**params) }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | context 'with parameters' do 23 | let(:path) { "/sapi/v1/margin/priceIndex?symbol=#{symbol}" } 24 | it 'should query margin priced index' do 25 | spot_client_signed.margin_price_index(symbol: symbol) 26 | expect(send_a_request(:get, path)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/trade/open_order_list_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Trade, '#open_order_list' do 6 | let(:path) { '/api/v3/openOrderList' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return all open oco orders' do 17 | spot_client_signed.open_order_list(**params) 18 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) do 23 | { 24 | recvWindow: 10_000 25 | } 26 | end 27 | 28 | it 'should return open oco orders' do 29 | spot_client_signed.open_order_list(**params) 30 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_enable_margin_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#sub_account_enable_margin' do 6 | let(:path) { '/sapi/v1/sub-account/margin/enable' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) do 10 | { 11 | email: 'alice@test.com' 12 | } 13 | end 14 | 15 | before do 16 | mocking_signature_and_ts(**params) 17 | stub_binance_sign_request(:post, path, status, body, params) 18 | end 19 | 20 | context 'validation email' do 21 | it 'should raise validation error without email' do 22 | expect { spot_client_signed.sub_account_enable_margin(email: '') }.to raise_error(Binance::RequiredParameterError) 23 | end 24 | end 25 | 26 | it 'should return assets' do 27 | spot_client_signed.sub_account_enable_margin(**params) 28 | expect(send_a_request_with_signature(:post, path, params)).to have_been_made 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_cancel_oco_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_cancel_oco' do 6 | let(:path) { '/sapi/v1/margin/orderList' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:delete, path, status, body, params) 13 | end 14 | 15 | context 'validation symbol' do 16 | let(:params) { { symbol: '' } } 17 | it 'should raise validation error without symbol' do 18 | expect { spot_client_signed.margin_cancel_oco(**params) }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | context 'with symbol' do 23 | let(:params) { { symbol: 'BNBUSDT' } } 24 | it 'should return all oco' do 25 | spot_client_signed.margin_cancel_oco(**params) 26 | expect(send_a_request_with_signature(:delete, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_enable_futures_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#sub_account_enable_futures' do 6 | let(:path) { '/sapi/v1/sub-account/futures/enable' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) do 10 | { 11 | email: 'alice@test.com' 12 | } 13 | end 14 | 15 | before do 16 | mocking_signature_and_ts(**params) 17 | stub_binance_sign_request(:post, path, status, body, params) 18 | end 19 | 20 | context 'validation email' do 21 | it 'should raise validation error without email' do 22 | expect { spot_client_signed.sub_account_enable_futures(email: '') }.to raise_error(Binance::RequiredParameterError) 23 | end 24 | end 25 | 26 | it 'should return assets' do 27 | spot_client_signed.sub_account_enable_futures(**params) 28 | expect(send_a_request_with_signature(:post, path, params)).to have_been_made 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_margin_account_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#sub_account_margin_account' do 6 | let(:path) { '/sapi/v1/sub-account/margin/account' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) do 10 | { 11 | email: 'alice@test.com' 12 | } 13 | end 14 | 15 | before do 16 | mocking_signature_and_ts(**params) 17 | stub_binance_sign_request(:get, path, status, body, params) 18 | end 19 | 20 | context 'validation email' do 21 | it 'should raise validation error without email' do 22 | expect { spot_client_signed.sub_account_margin_account(email: '') }.to raise_error(Binance::RequiredParameterError) 23 | end 24 | end 25 | 26 | it 'should return margin asset' do 27 | spot_client_signed.sub_account_margin_account(**params) 28 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/get_bnb_burn_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_get_bnb_burn' do 6 | let(:path) { '/sapi/v1/bnbBurn' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | context 'without parameter' do 17 | it 'should return BNB burn status' do 18 | spot_client_signed.get_bnb_burn 19 | expect(send_a_request_with_signature(:get, path)).to have_been_made 20 | end 21 | end 22 | 23 | context 'with recvWindow' do 24 | let(:params) do 25 | { 26 | recvWindow: 5000 27 | } 28 | end 29 | it 'should return BNB burn status' do 30 | spot_client_signed.get_bnb_burn(**params) 31 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 32 | end 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/get_sub_account_spot_summary_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#get_sub_account_spot_summary' do 6 | let(:path) { '/sapi/v1/sub-account/spotSummary' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return sub account spot summary' do 17 | spot_client_signed.get_sub_account_spot_summary 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return sub account spot summary' do 25 | spot_client_signed.get_sub_account_spot_summary(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/universal_transfer_history_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#universal_transfer_history' do 6 | let(:path) { '/sapi/v1/sub-account/universalTransfer' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return universal transfer history' do 17 | spot_client_signed.universal_transfer_history 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return universal transfer history' do 25 | spot_client_signed.universal_transfer_history(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/fiat/fiat_payment_history_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Fiat, '#fiat_payment_history' do 6 | let(:path) { '/sapi/v1/fiat/payments' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'validation' do 16 | let(:params) { { transactionType: '' } } 17 | it 'should raise validation error without mandatory params' do 18 | expect { spot_client_signed.fiat_payment_history(**params) }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | context 'with params' do 23 | let(:params) { { transactionType: 0 } } 24 | it 'should return payment history' do 25 | spot_client_signed.fiat_payment_history(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/create_virtual_sub_account_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#create_virtual_sub_account' do 6 | let(:path) { '/sapi/v1/sub-account/virtualSubAccount' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { { subAccountString: 'virtualAccount' } } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:post, path, status, body, params) 14 | end 15 | 16 | context 'validate subAccountString' do 17 | it 'should raise validation error without subAccountString' do 18 | expect { spot_client_signed.create_virtual_sub_account(subAccountString: '') }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | it 'should create virtual sub account' do 23 | spot_client_signed.create_virtual_sub_account(**params) 24 | expect(send_a_request_with_signature(:post, path, params)).to have_been_made 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/margin_cancel_all_order_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#margin_cancel_all_order' do 6 | let(:path) { '/sapi/v1/margin/openOrders' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:delete, path, status, body, params) 13 | end 14 | 15 | context 'validation symbol' do 16 | let(:params) { { symbol: '' } } 17 | it 'should raise validation error without symbol' do 18 | expect { spot_client_signed.margin_cancel_all_order(**params) }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | context 'with symbol' do 23 | let(:params) { { symbol: 'BNBUSDT' } } 24 | it 'should return all oco' do 25 | spot_client_signed.margin_cancel_all_order(**params) 26 | expect(send_a_request_with_signature(:delete, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/subaccount/sub_account_futures_account_summary_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Subaccount, '#sub_account_futures_account_summary' do 6 | let(:path) { '/sapi/v2/sub-account/futures/accountSummary' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { { futuresType: 1 } } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | context 'validate futuresType' do 17 | it 'should raise validation error without futuresType' do 18 | expect { spot_client_signed.sub_account_futures_account_summary(futuresType: '') }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | it 'should return futures account summary' do 23 | spot_client_signed.sub_account_futures_account_summary(**params) 24 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /lib/binance/spot/c2c.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Binance 4 | class Spot 5 | # C2C endpoints 6 | # @see https://developers.binance.com/docs/c2c/Introduction 7 | module C2C 8 | # Get C2C Trade History (USER_DATA) 9 | # 10 | # GET /sapi/v1/c2c/orderMatch/listUserOrderHistory 11 | # 12 | # @param tradeType [String] 13 | # @option kwargs [Integer] :startTimestamp 14 | # @option kwargs [Integer] :endTimestamp 15 | # @option kwargs [Integer] :page 16 | # @option kwargs [Integer] :rows 17 | # @option kwargs [Integer] :recvWindow 18 | # @option kwargs [Integer] :timestamp 19 | # @see https://developers.binance.com/docs/c2c/rest-api/Get-C2C-Trade-History 20 | def c2c_trade_history(tradeType:, **kwargs) 21 | Binance::Utils::Validation.require_param('tradeType', tradeType) 22 | 23 | @session.sign_request(:get, '/sapi/v1/c2c/orderMatch/listUserOrderHistory', params: kwargs.merge(tradeType: tradeType)) 24 | end 25 | end 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/get_isolated_margin_account_limit_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#get_isolated_margin_account_limit' do 6 | let(:path) { '/sapi/v1/margin/isolated/accountLimit' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return isolated margin account limit' do 17 | spot_client_signed.get_isolated_margin_account_limit 18 | expect(send_a_request_with_signature(:get, path)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) { { recvWindow: 10_000 } } 23 | 24 | it 'should return isolated margin account limit' do 25 | spot_client_signed.get_isolated_margin_account_limit(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/simple_earn/simple_earn_account_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::SimpleEarn, '#simple_earn_account' do 6 | let(:path) { '/sapi/v1/simple-earn/account' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return simple earn account information' do 17 | spot_client_signed.simple_earn_account(**params) 18 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) do 23 | { 24 | recvWindow: 10_000 25 | } 26 | end 27 | 28 | it 'should return simple earn account information' do 29 | spot_client_signed.simple_earn_account(**params) 30 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/get_cross_margin_data_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#get_cross_margin_data' do 6 | let(:path) { '/sapi/v1/margin/crossMarginData' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'without parameter' do 16 | let(:params) { {} } 17 | it 'should return cross magin data' do 18 | spot_client_signed.get_cross_margin_data 19 | expect(send_a_request_with_signature(:get, path)).to have_been_made 20 | end 21 | end 22 | 23 | context 'with vipLevel' do 24 | let(:params) do 25 | { 26 | vipLevel: 1 27 | } 28 | end 29 | it 'should return cross margin data' do 30 | spot_client_signed.get_cross_margin_data(**params) 31 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 32 | end 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /spec/binance/spot/fiat/fiat_deposit_withdraw_history_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Fiat, '#fiat_deposit_withdraw_history' do 6 | let(:path) { '/sapi/v1/fiat/orders' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:get, path, status, body, params) 13 | end 14 | 15 | context 'validation' do 16 | let(:params) { { transactionType: '' } } 17 | it 'should raise validation error without mandatory params' do 18 | expect { spot_client_signed.fiat_deposit_withdraw_history(**params) }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | context 'with params' do 23 | let(:params) { { transactionType: 0 } } 24 | it 'should return deposit withdrawal history' do 25 | spot_client_signed.fiat_deposit_withdraw_history(**params) 26 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /spec/binance/spot/simple_earn/collateral_record_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::SimpleEarn, '#collateral_record' do 6 | let(:path) { '/sapi/v1/simple-earn/flexible/history/collateralRecord' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | let(:params) { {} } 10 | 11 | before do 12 | mocking_signature_and_ts(**params) 13 | stub_binance_sign_request(:get, path, status, body, params) 14 | end 15 | 16 | it 'should return collateral record' do 17 | spot_client_signed.collateral_record(**params) 18 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 19 | end 20 | 21 | context 'with params' do 22 | let(:params) do 23 | { 24 | size: 10, 25 | recvWindow: 10_000 26 | } 27 | end 28 | 29 | it 'should return collateral record' do 30 | spot_client_signed.collateral_record(**params) 31 | expect(send_a_request_with_signature(:get, path, params)).to have_been_made 32 | end 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /spec/binance/spot/margin/enable_isolated_margin_account_spec.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'spec_helper' 4 | 5 | RSpec.describe Binance::Spot::Margin, '#enable_isolated_margin_account' do 6 | let(:path) { '/sapi/v1/margin/isolated/account' } 7 | let(:body) { fixture('response.json') } 8 | let(:status) { 200 } 9 | 10 | before do 11 | mocking_signature_and_ts(**params) 12 | stub_binance_sign_request(:post, path, status, body, params) 13 | end 14 | 15 | context 'validation symbol' do 16 | let(:params) { { symbol: '' } } 17 | it 'should raise validation error without symbol' do 18 | expect { spot_client_signed.enable_isolated_margin_account(**params) }.to raise_error(Binance::RequiredParameterError) 19 | end 20 | end 21 | 22 | context 'with symbol' do 23 | let(:params) { { symbol: 'BNBUSDT' } } 24 | it 'should enable isolated margin account' do 25 | spot_client_signed.enable_isolated_margin_account(**params) 26 | expect(send_a_request_with_signature(:post, path, params)).to have_been_made 27 | end 28 | end 29 | end 30 | --------------------------------------------------------------------------------