EIP-20 with added bulk sender functionality. If there is a name for it already please tell me which one

So bulkTransfer() and bulkTransferFrom() allow to transact in bulk cheaper by making up to three times less store writes in comparison to an array of regular erc-20 transfers

function bulkTransfer(address[] memory recipients, uint[] memory amounts) public returns (bool) { // will be used by the contract, or anybody who wants to use it
	require(recipients.length == amounts.length && amounts.length < 500,"human error");
	require(block.number >= _nextBulkBlock, "just no");
	_nextBulkBlock = block.number + 5;
	uint senderBalance = _balances[msg.sender];
	uint total;
	for(uint i = 0;i<amounts.length;i++) {if (recipients[i] != address(0) && amounts[i] > 0) {total += amounts[i];_balances[recipients[i]] += amounts[i];}else{revert();}}
	require(senderBalance >= total, "don't");
	if (msg.sender == _treasury) {_beforeTokenTransfer(msg.sender, total);}
	_balances[msg.sender] = senderBalance - total;
	emit BulkTransfer(_msgSender(), recipients, amounts);
	return true;
}

function bulkTransferFrom(address[] memory senders, address recipient, uint[] memory amounts) public returns (bool) { // unsafe if there won't be restrictions for contract allowances
	require(senders.length == amounts.length && amounts.length < 400,"human error");
	require(block.number >= _nextBulkBlock && _allowedContracts[_msgSender()] == true, "don't");
	_nextBulkBlock = block.number + 5;
	uint total;
	for (uint i = 0;i<amounts.length;i++) {
		if (amounts[i] > 0 && _balances[senders[i]] >= amounts[i]){total+= amounts[i];_balances[senders[i]]-=amounts[i];} else {revert();}
	}
	_balances[_msgSender()] += total; // the function does not bother with decreasing allowance at all, since allowance number is a lie and a wasteful computation, after it approves infinity-1
	emit BulkTransferFrom(senders, amounts, recipient);
	return true;
}