合规协议

遵守反洗钱法(AML)要求金融机构(FI)不仅要知道他们的客户是谁汇款,还要知道他们的客户从谁那里收钱。 在某些司法管辖区,银行能够信任其他持牌银行的反洗钱程序。 在其他司法管辖区,每家银行必须对发件人和收件人进行自己的制裁检查。 合规协议处理所有这些方案。

在FI之间交换的客户信息是灵活的,但典型的字段是:

  • 姓名
  • 出生日期
  • 物理地址

合规协议是federation之后的另一个步骤。 在此步骤中,发送FI联系接收FI以获得发送交易的许可。 为此,接收FI创建AUTH_SERVER并将其位置添加到FI的POCC.toml

您可以创建自己的接口来实现合规性协议,或者我们还创建了您可以使用的简单合规性服务

AUTH_SERVER

AUTH_SERVER提供一个接口,由发送FI调用以获得批准以向其中一个接收FI的客户发送付款。 AUTH_SERVER URL应放在组织的POCC.toml文件中。

Request

要将交易数据发送到接收组织,请将HTTP POST发送到AUTH_SERVERContent-Type等于application / x-www-form-urlencoded以及以下正文:

data=<data value>&sig=<sig value>

data是一个包含以下字段的JSON块:

名称 数据类型 说明
sender string 正在发起发送的客户的付款地址:bob*bank.com
need_info boolean 如果呼叫者需要收件人的AML信息才能发送付款。
tx string: base64 encoded xdr.Transaction 发件人希望以XDR格式发送的交易。 此交易是无符号的,它的序列号应该等于0
attachment string 附件的全文。 此附件的哈希值作为Memo包含在交易中。 附件字段遵循POCChain附件公约,并且应至少包含发件人的足够信息,以允许接收FI进行其制裁检查。

sig是发送FI发出的数据块的签名。 接收机构应检查此签名是否对发送FI的POCC.tomlSIGNING_KEY字段)中发布的公共签名密钥有效。

示例请求正文(请注意它包含参数datasig):

data=%7B%22sender%22%3A%22aldi%2AbankA.com%22%2C%22need_info%22%3Atrue%2C%22tx%22%3A%22AAAAAEhAArfpmUJYq%2FQ9SFAH3YDzNLJEBI9i9TXmJ7s608xbAAAAZAAMon0AAAAJAAAAAAAAAAPUg1%2FwDrMDozn8yfiCA8LLC0wF10q5n5lo0GiFQXpPsAAAAAEAAAAAAAAAAQAAAADdvkoXq6TXDV9IpguvNHyAXaUH4AcCLqhToJpaG6cCyQAAAAAAAAAAAJiWgAAAAAA%3D%22%2C%22attachment%22%3A%22%7B%5C%22nonce%5C%22%3A%5C%221488805458327055805%5C%22%2C%5C%22transaction%5C%22%3A%7B%5C%22sender_info%5C%22%3A%7B%5C%22address%5C%22%3A%5C%22678+Mission+St%5C%22%2C%5C%22city%5C%22%3A%5C%22San+Francisco%5C%22%2C%5C%22country%5C%22%3A%5C%22US%5C%22%2C%5C%22first_name%5C%22%3A%5C%22Aldi%5C%22%2C%5C%22last_name%5C%22%3A%5C%22Dobbs%5C%22%7D%2C%5C%22route%5C%22%3A%5C%221%5C%22%2C%5C%22note%5C%22%3A%5C%22%5C%22%2C%5C%22extra%5C%22%3A%5C%22%5C%22%7D%2C%5C%22operations%5C%22%3Anull%7D%22%7D&sig=KgvyQTZsZQoaMy8jdwCUfLayfgfFMUdZJ%2B0BIvEwiH5aJhBXvhV%2BipRok1asjSCUS%2FUaGeGKDoizS1%2BtFiiyAA%3D%3D

解码数据参数后,它有以下形式:

{
  "sender": "aldi*bankA.com",
  "need_info": true,
  "tx": "AAAAAEhAArfpmUJYq/Q9SFAH3YDzNLJEBI9i9TXmJ7s608xbAAAAZAAMon0AAAAJAAAAAAAAAAPUg1/wDrMDozn8yfiCA8LLC0wF10q5n5lo0GiFQXpPsAAAAAEAAAAAAAAAAQAAAADdvkoXq6TXDV9IpguvNHyAXaUH4AcCLqhToJpaG6cCyQAAAAAAAAAAAJiWgAAAAAA=",
  "attachment": "{\"nonce\":\"1488805458327055805\",\"transaction\":{\"sender_info\":{\"address\":\"678 Mission St\",\"city\":\"San Francisco\",\"country\":\"US\",\"first_name\":\"Aldi\",\"last_name\":\"Dobbs\"},\"route\":\"1\",\"note\":\"\",\"extra\":\"\"},\"operations\":null}"
}

请注意,tx的memo值是附件的sha256哈希值。

响应

AUTH_SERVER将返回带有以下字段的JSON对象:

名称 数据类型 说明
info_status ok, denied, pending 如果此FI愿意共享AML信息。
tx_status ok, denied, pending 如果此FI愿意接受此交易。
dest_info string (仅在info_statusok时显示)收件人AML信息的Marshalled JSON。
pending integer (仅在info_statustx_status挂起时才出现估计发送者可以检查状态变化的秒数。 发件人应该在给定的秒数后重新提交此请求。

响应示例

{
    "info_status": "ok",
    "tx_status": "pending",
    "dest_info": "{\"name\": \"John Doe\"}",
    "pending": 3600
}

流程示例

在这个例子中,Aldi aldi*bankA.com想发送给Bogart bogart*bankB.com

1)银行A获取与银行B交互所需的信息

这是通过查找银行B的POCC.toml文件来完成的。

银行A - >获取https://[your domain]/.well-known/POCC.toml

从这个.toml文件中,它为银行B提取了以下信息:

  • FEDERATION_SERVER
  • AUTH_SERVER
2)银行A获取Bogart的路由信息,以便它可以构建交易

这是通过要求银行B的联合服务器解析bogart*bankB.com来完成的。

银行A - > FEDERATION_SERVER?type = name&q=bogart*bankB.com

有关完整说明,请参阅Federation。 这里返回的感兴趣的领域是:

  • Bogart FI的POCChain AccountID
  • Bogart的路线信息

联邦响应示例:

{
  "stellar_address": "bogart*bankB.com",
  "account_id": "GDJ2GYMIQRIPTJZXQAVE5IM675ITLBAMQJS7AEFIWM4HZNGHVXOZ3TZK",
  "memo_type": "id",
  "memo": 1
}
3)银行A向银行提出Auth请求

该请求将向银行B询问Bogart的AML信息以及发送给Bogart的许可。

银行A - > AUTH_SERVER

示例请求正文(请注意它包含参数datasig):

data=%7B%22sender%22%3A%22aldi%2AbankA.com%22%2C%22need_info%22%3Atrue%2C%22tx%22%3A%22AAAAAEhAArfpmUJYq%2FQ9SFAH3YDzNLJEBI9i9TXmJ7s608xbAAAAZAAMon0AAAAJAAAAAAAAAAPUg1%2FwDrMDozn8yfiCA8LLC0wF10q5n5lo0GiFQXpPsAAAAAEAAAAAAAAAAQAAAADdvkoXq6TXDV9IpguvNHyAXaUH4AcCLqhToJpaG6cCyQAAAAAAAAAAAJiWgAAAAAA%3D%22%2C%22attachment%22%3A%22%7B%5C%22nonce%5C%22%3A%5C%221488805458327055805%5C%22%2C%5C%22transaction%5C%22%3A%7B%5C%22sender_info%5C%22%3A%7B%5C%22address%5C%22%3A%5C%22678+Mission+St%5C%22%2C%5C%22city%5C%22%3A%5C%22San+Francisco%5C%22%2C%5C%22country%5C%22%3A%5C%22US%5C%22%2C%5C%22first_name%5C%22%3A%5C%22Aldi%5C%22%2C%5C%22last_name%5C%22%3A%5C%22Dobbs%5C%22%7D%2C%5C%22route%5C%22%3A%5C%221%5C%22%2C%5C%22note%5C%22%3A%5C%22%5C%22%2C%5C%22extra%5C%22%3A%5C%22%5C%22%7D%2C%5C%22operations%5C%22%3Anull%7D%22%7D&sig=KgvyQTZsZQoaMy8jdwCUfLayfgfFMUdZJ%2B0BIvEwiH5aJhBXvhV%2BipRok1asjSCUS%2FUaGeGKDoizS1%2BtFiiyAA%3D%3D

解码数据参数后,它有以下形式:

{
  "sender": "aldi*bankA.com",
  "need_info": true,
  "tx": "AAAAAEhAArfpmUJYq/Q9SFAH3YDzNLJEBI9i9TXmJ7s608xbAAAAZAAMon0AAAAJAAAAAAAAAAPUg1/wDrMDozn8yfiCA8LLC0wF10q5n5lo0GiFQXpPsAAAAAEAAAAAAAAAAQAAAADdvkoXq6TXDV9IpguvNHyAXaUH4AcCLqhToJpaG6cCyQAAAAAAAAAAAJiWgAAAAAA=",
  "attachment": "{\"nonce\":\"1488805458327055805\",\"transaction\":{\"sender_info\":{\"address\":\"678 Mission St\",\"city\":\"San Francisco\",\"country\":\"US\",\"first_name\":\"Aldi\",\"last_name\":\"Dobbs\"},\"route\":\"1\",\"note\":\"\",\"extra\":\"\"},\"operations\":null}"
}

请注意,tx的memo值是附件的sha256哈希值,联合服务器返回支付目的地。 您可以使用XDR Viewer检查上面的交易。

4)银行B处理Auth请求
  • 银行B通过将发件人地址(aldi*bankA.com)分为两部分来获取发件人域名:aldibankA.com
  • 银行B - >提取https://[your domain]/.well-known/POCC.toml从此获取银行A的SIGNING_KEY
  • 银行B验证Auth请求上的签名是否与银行A的SIGNING_KEY签名
  • 银行B对Aldi进行制裁检查。 这决定了tx_status的值。
  • 银行B决定是否根据以下内容披露Bogart的AML信息:
    • Bogart公开了他们的信息
    • Bogart允许银行A
    • Bogart允许Aldi
    • 银行B允许银行A
  • 如果上述条件均不符合,银行B应向Bogart询问是否要将此信息透露给银行A并接受此付款。 在这种情况下,银行B将在Auth请求回复中返回info_status:“pending”,以便让Bogart有时间接受付款。
  • 如果银行B确定它可以与银行A共享AML信息,它会在dest_info字段中发送此信息并附上回复。

有关潜在的返回值,请参阅Auth Server响应

响应示例:

{
    "info_status": "ok",
    "tx_status": "ok",
    "dest_info": "{\"name\": \"Bogart Doe\"}",
}
5)银行A处理来自Auth请求的回复

如果对AUTH_SERVER的调用返回了挂起,则银行A必须在估计的秒数后再次重新提交请求。

6)银行A进行制裁检查

一旦银行A从银行B获得了dest_info,银行A就会使用Bogart的AML信息进行制裁检查。 如果制裁检查通过,银行A将签署并将交易提交给POCChain网络。

7)银行B处理收款。
  • 它根据它拥有的缓存检查交易哈希,或者重新对发送方进行制裁检查。
  • 它将Bogart的帐户记入发送金额或将交易发回。