Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new payment method: Japan Bank Transfer #3225

Merged
merged 2 commits into from Sep 13, 2019

Conversation

@wiz
Copy link
Member

commented Sep 8, 2019

Japan Bank Transfer 🇯🇵

Summary

This PR adds support for Bisq trades using the Japanese Bankers Association (Zenginkyo) payment processing network, known casually to everyone in Japan as "furikomi".

  • Country Restrictions: Japan only
  • Currency Restrictions: JPY only
  • Chargeback Risks: None, cannot reverse or chargeback
  • Per-Trade Risk Limit: LOW (0.5 BTC * 2.0 multiplier = 1 BTC)
  • Per-Trade Time Limit: DAY (transfers are near-instant, and 24/7/365 for major banks)

Overview

  • In Japan, over 98% of population has a bank account[1].
  • Transfers take minutes to complete, and fees are very low.
  • Almost all major banks are now supporting 24/7/365 transfers.
  • Japan's post office is the world's largest deposit holder[2], and can be used.
  • Security, Privacy, and Freedom of Japanese banking is better than most countries.

Security

Compared to USA style bank accounts or Visa style credit cards, where anyone who knows your routing/account number can initiate fraudulent transfers out of your account, Japan's bank transfer system is secure:

  • Banks give everyone a hardware security token to authorize transfers
  • Bank transfers can only be authorized by the account holder directly
  • Bank transfers are not reversible or chargeback-able (details below)

Privacy

In Japan, your bank account details are not considered sensitive information:

  • Bank account info can be published publicly, like a Bitcoin address
  • Companies publish their bank account info on their website/invoices

Of course, banks and governments can see all transactions that flow through their systems. However, the nature of the transaction, and source of funds, etc. are not requested or recorded, as the transfer is fully electronic and not processed by humans. Because of this, ihe trading parties actually have decent privacy compared to other country's bank transfer methods. Additionally, no tax ID or other personal information are exchanged for the transaction, so it is very unlikely that users of this payment method will have their bank accounts frozen or shut down as a result.

Freedom

Since the system is inheriently secure, banks don't need to police the system:

  • Banks don't generally "freeze" any "suspicious looking" transactions
  • Banks don't generally have restrictions on domestic bank transfers
  • Banks don't generally enforce arbitrary limits or capital controls

The fully automated and electronic system does not censor transactions.

How it works

  • Cost is low ($0 ~ $3)
  • Transfers are fast (0 ~ 5 minutes)
  • Available 24/7/365 with most larger banks

Account Information

To send a Japan Bank Transfer, the sender needs the following information:

  • Bank name/number (4 digits)
  • Branch name/number (3 digits)
  • Account type/number (7 digits)

Sending a Transfer

After the sender inputs the above data into their online banking, the receiving account holder's name is displayed to the sender so they can verify they are sending funds to the correct account before they finalize the transaction.

The transfer is usually completed almost instantly (less than 5 minutes), or on the next business day if the sender's bank does not support 24/7/365 transfers outside of normal banking hours.

Fraud Risks

  1. If you transfer funds to an invalid account (i.e. the destination account is closed or cannot be located), the funds are automatically returned to the sender's account within 24 hours.

  2. If you transfer funds to a valid account, once that accounts receives it (which is usually less than 2 minutes), you can request a chargeback if this transfer was a mistake. However, "The recipient bank will contact the payee and the funds will not be returned without the recipient's consent."[3]

  3. If a stolen or hacked bank account is used to transfer funds to you, the bank will not reverse the transaction just because the account was hacked. The sender would have to go the police and utilize the court system to get refunded, but this is presumably hard to do, and not likely to happen unless transaction amount is very high.

Therefore, the Japan Bank Transfer payment method is requested to be added with "LOW" risk setting, which limits each trade to 0.5 BTC by default, and after multiplying by the current DAO parameter (200%), this means Japan Bank Transfers will be limited to 1 BTC per trade at this time of this PR.

Footnotes

  1. "Japan population (ages 15+) 98.24%"
    Source: World Bank Account ownership at a financial institution
    URL: https://data.worldbank.org/indicator/FX.OWN.TOTL.ZS

  2. "As of November 2008, it was reported as being the world's biggest deposit holder."
    Source: Japan Post Bank, Wikipedia, the free encyclopedia
    URL: https://en.wikipedia.org/wiki/Japan_Post_Bank

  3. "振込先銀行より受取人に連絡し、受取人の了解がないと資金は戻りません。"
    Source: Sumitomo Mitsui Banking Corporation support page on transfer reversals
    URL: https://www.smbc.co.jp/kojin/direct/ib/help/help_kumimodoshi.html

Screenshots

Create Account

Form empty (English)

Screen Shot 2019-09-13 at 11 50 44

Form empty (Japanese)

Screen Shot 2019-09-13 at 11 55 47

Form filled (English)

Screen Shot 2019-09-13 at 11 53 47

Form filled (Japanese)

Screen Shot 2019-09-13 at 11 57 13

Bank search functionality

Screen Shot 2019-09-13 at 11 52 00

String validation for Japanese-only input fields

Screen Shot 2019-09-13 at 12 35 55

Trade limits

Screen Shot 2019-09-13 at 11 56 58

Display Account

Screen Shot 2019-09-13 at 12 29 08

Offer View

Maker view showing full details

Screen Shot 2019-09-13 at 12 00 21

Taker view showing Japan Bank Transfer payment method

Screen Shot 2019-09-13 at 12 42 52

Trade in progress (Japanese)

Screen Shot 2019-09-13 at 13 27 04

Trade requires attention for Buyer (Japanese)

Screen Shot 2019-09-13 at 13 30 10

Trade requires attention for Seller (English)

Screen Shot 2019-09-13 at 13 33 02

Trade information (English)

Screen Shot 2019-09-13 at 13 33 17

Trade information (Japanese)

Screen Shot 2019-09-13 at 13 27 04

Implementation Details

Input Validation

Bank Code: automatically entered from selected bank
Bank Name: must be selected from hard-coded list of 500 banks
Branch Name: must be Japanese characters
Branch Code: must be 3 digits
Account Name: must be Japanese characters
Account Number must be 4 ~ 8 digits
Account Type: radio buttons of 2 choices

Protobuf template

message JapanBankAccountPayload {
    string bank_name = 1;
    string bank_code = 2;                                   
    string bank_branch_name = 3;
    string bank_branch_code = 4;
    string bank_account_type = 5;
    string bank_account_name = 6;
    string bank_account_number = 7;
}

JSON contract payload

  "makerPaymentAccountPayload": {
    "bankName": "三井住友銀行",
    "bankCode": "0009",
    "bankBranchName": "銀座",
    "bankBranchCode": "042",
    "bankAccountType": "普通",
    "bankAccountName": "ナカモト サトシ",
    "bankAccountNumber": "1337",
    "paymentMethodId": "JAPAN_BANK",
    "id": "6d75ef11-2556-40ad-9059-bd73973f19e8",
    "maxTradePeriod": -1
  },
  "takerPaymentAccountPayload": {
    "bankName": "三井住友銀行",
    "bankCode": "0009",
    "bankBranchName": "東京",
    "bankBranchCode": "132",
    "bankAccountType": "普通",
    "bankAccountName": "山田太郎",
    "bankAccountNumber": "8765674",
    "paymentMethodId": "JAPAN_BANK",
    "id": "689185f5-93b7-4e77-a1ef-61ab4acc5a35",
    "maxTradePeriod": -1
  },
@chimp1984

This comment has been minimized.

Copy link
Contributor

commented Sep 8, 2019

Wow, the world has to learn a lot from Japan!

@wiz wiz force-pushed the wiz:japan-bank-transfer-payment-method branch from 5e19a6b to f2d93fd Sep 9, 2019
@wiz wiz referenced this pull request Sep 9, 2019
Copy link
Member

left a comment

NACK - Although it wasn't up for review - here some minor change suggestions. @wiz Do you plan to open this PR for public review soon? utACK - Great work @wiz!

@wiz wiz force-pushed the wiz:japan-bank-transfer-payment-method branch 2 times, most recently from 94f8626 to ea9c98a Sep 11, 2019
@wiz wiz force-pushed the wiz:japan-bank-transfer-payment-method branch 2 times, most recently from 528afb5 to 888b016 Sep 13, 2019
@wiz wiz force-pushed the wiz:japan-bank-transfer-payment-method branch from 888b016 to fb385a0 Sep 13, 2019
@wiz wiz marked this pull request as ready for review Sep 13, 2019
@wiz wiz requested a review from sqrrm as a code owner Sep 13, 2019
@wiz wiz changed the title [WIP] Add new payment method: Japan Bank Transfer (furikomi) Add new payment method: Japan Bank Transfer Sep 13, 2019
@wiz wiz requested a review from ripcurlx Sep 13, 2019
@ripcurlx ripcurlx merged commit 13f00a9 into bisq-network:master Sep 13, 2019
1 check passed
1 check passed
continuous-integration/travis-ci/pr The Travis CI build passed
Details
@wiz wiz deleted the wiz:japan-bank-transfer-payment-method branch Sep 13, 2019
@tdhr0917

This comment has been minimized.

Copy link

commented Sep 13, 2019

I've reviewed now. It seems good.

{
private final JapanBankAccount japanBankAccount;
protected ComboBox<String> bankComboBox, bankAccountTypeComboBox;
private InputTextField bankAccountNumberInputTextField;

This comment has been minimized.

Copy link
@FKrauss

FKrauss Sep 21, 2019

Member

noob here. don't be mad at me if I'm wrong :)
shouldn't it be?
private InputTextField bankAccountNumber, InputTextField;

This comment has been minimized.

Copy link
@ripcurlx

ripcurlx Sep 23, 2019

Member

Nope :-)

@ripcurlx ripcurlx referenced this pull request Oct 7, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
5 participants
You can’t perform that action at this time.